As directed by the IOC output(!):
Asyn 4-8, streamDevice 2-2, EPICS 3.14.8.2, vxWorks 5.5.1 on MVME5500
(garbage elided): A call to "assert
((epicsMutexLock((pport->asynManagerLock))==epicsMutexLockOK))" failed
in ../../asyn/asynDriver/asynManager.c at 2151
Current time THU JUN 21 2007 14:09:51.144096000.
EPICS Release EPICS R3.14.8.2 $R3-14-8-2$ $2006/01/06 15:55:13$.
Please E-mail this message and the output from "tt (0x1ed441a0)"
The backtrace is:
(gdb) bt
#0 0x22bbf4 in taskSuspend ()
#1 0x1e8ccebc in epicsThreadSuspendSelf ()
#2 0x1e8cb908 in epicsAssert ()
#3 0x1e754ac8 in interruptEnd (pasynPvt=0x1ed40fe0)
at ../../asyn/asynDriver/asynManager.c:2151
#4 0x1e75924c in callInterruptUsers (pasynUser=0x1eafb798,
pasynPvt=0x1ed40fe0,
data=0x1ed40b20 (as before),
nbytesTransfered=0x1ed43a74,
eomReason=0x1ed43fc4)
at ../../asyn/interfaces/asynOctetBase.c:224
#5 0x1e75959c in readRaw (drvPvt=0x1ed411d0,
pasynUser=0x1eafb798,
data=0x1ed40b20 "\001001,2007.06.21"...,
maxchars=600,
nbytesTransfered=0x1ed43a74,
eomReason=0x1ed43fc4)
at ../../asyn/interfaces/asynOctetBase.c:282
#6 0x1e75ddd0 in readIt (ppvt=0x1ed40f70,
pasynUser=0x1eafb798,
data=0x1eafb904 "",
maxchars=63,
nbytesTransfered=0x1ed43fc0,
eomReason=0x1ed43fc4)
at ../../asyn/miscellaneous/asynInterposeEos.c:244
#7 0x1e745d54 in AsynDriverInterface::readHandler ()
#8 0x1e747dc4 in handleRequest ()
#9 0x1e74ea8c in portThread (pport=0x1ed446b0) at
../../asyn/asynDriver/asynManager.c:777
#10 0x1e8cd600 in createFunction ()
#11 0x231ff8 in vxTaskEntry ()
Clearly something is getting overwritten, and at the point of the
assertion failure, (struct interruptBase *)pasynPvt->pport = 0x2c,
obviously bogus. In fact the pasynPvt passed in to interruptEnd is
bogus.
I know that the cause may be entirely unrelated to this trace, but if
anyone can shed light on it, I'd be grateful. I have a debugger
attached, and am slowly working through...
The only anomaly I can see so far is that while readIt() has
maxchars=63, readRaw has maxchars=600, and so 600 bytes get transferred
and passed back to the interrupt user.