[comp.sys.mac.programmer] Apple Modem Tool async close woes

dorner@pequod.cso.uiuc.edu (Steve Dorner) (11/03/90)

I've just spent two days beating my head against a wall.  Either
I'm missing something (a distinct possibility) or the "Apple Modem
Tool" does not support calling CMClose asynchronously.

Here's my close routine:

/************************************************************************
 * MyCMClose - call CMClose
 ************************************************************************/
short MyCMClose(ConnHandle cn)
{
  AsyncStuff stuff;
  short err;		/* real error */
  short repErr;		/* error to be reported to user */

  (*cn)->refCon = (long) &stuff;	/* store address */
  stuff.pending = 1;
  if (BUG1)
  {
    if (!(repErr=err=CMClose(cn,True,CTBComplete,-1,True)))
    {
      SpinOn(&stuff.pending);
      if (CommandPeriod)
      {
	err = cmTimeOut;
	repErr = noErr;
      }
    }
  }
  else
    repErr=err=CMClose(cn,False,nil,-1,True);
  if (repErr) CTBTrouble(repErr);
  return (err);		/* error? */
}

If BUG1 is non-zero, the connection will not be closed properly, and the
next time I try to open a connection, I will be told that the "selected
port is in use".

SpinOn spins (politely) until a flag is cleared; CTBComplete clears the flag.
SpinOn does call CMIdle (this seems to be required for async opens).  SpinOn
will set the global CommandPeriod if the user types cmd-. (I'm not, FYI.)

I use exactly the same strategy for CMOpen, CMRead, and CMWrite, with no
problems.  It's only CMClose that's obnoxious.  Am I doing something wrong,
or is this indeed a bug?  (CTB 1.0, SE/30, 8MB, 6.0.5, MPW C 3.1, few INIT's,
if any of that matters.)

The "Serial Tool" doesn't exhibit the behavior.


--
Steve Dorner, U of Illinois Computing Services Office
Internet: s-dorner@uiuc.edu  UUCP: uunet!uiucuxc!uiuc.edu!s-dorner