This error is in the call to ca_add_array_event at line 618 in recDynLink.c, in the getCallback() function.
I added a printf to see what PV is being added there, and it is the .ACQG field of the mca record.
recDynLink::getCallback calling ca_add_array_event pv=microDXP:mca1.ACQG
ca_add_array_event is printing this error:
CA.Client.Exception...............................................
Error: "The data type specifed is invalid"
Context: "ca_add_array_event"
Source File: ../recDynLink.c line 624
Current Time: Sun Apr 29 2018 08:09:06.304102377
This is the debug dump of the variables in the recDynLink::getCallback function
+ &pdynLinkPvt 0x06b8fa1c dynLinkPvt * *
+ &pdynLinkPvt->evid 0x062a5c24 oldSubscription * *
+ mapNewToOld 0x00de8de8 mapNewToOld short [10]
mapNewToOld[pdynLinkPvt->dbrType] 256 short
- pdynLinkPvt 0x062a5c18 {lock=0x062491c0 pvname=0x05823658 "microDXP:mca1.ACQG" chid=0x06e6dad8 ...} dynLinkPvt *
+ lock 0x062491c0 {node={...} id=0x06276a30 pFileName=0x00de8f9c "../recDynLink.c" ...} epicsMutexParm *
+ pvname 0x05823658 "microDXP:mca1.ACQG" char *
- chid 0x06e6dad8 {cacCtx={...} io={...} pConnCallBack=0x003247e0 ...} oldChannelNotify *
+ cacChannelNotify {...} cacChannelNotify
+ cacCtx {sgTable={...} oldChannelNotifyFreeList={...} getCopyFreeList={...} ...} ca_client_context &
+ io {priorityMax=99 priorityMin=0 priorityDefault=0 ...} cacChannel &
pConnCallBack 0x003247e0 connectCallback(connection_handler_args) void (connection_handler_args)*
pPrivate 0x0583eee4 void *
pAccessRightsFunc 0x003f1fc0 cacNoopAccesRightsHandler(access_rights_handler_args) void (access_rights_handler_args)*
ioSeqNo 0 unsigned int
currentlyConnected true bool
prevConnected true bool
+ evid 0x00000000 {chan=??? id=??? pFunc=??? ...} oldSubscription *
searchCallback 0x002d3490 pvSearchCallback(recDynLink *) void (recDynLink *)*
monitorCallback 0x002d3570 inputChanged(recDynLink *) void (recDynLink *)*
notifyCallback 0x00000000 void (recDynLink *)*
userGetCallback 0x00000000 void (recDynLink *)*
notifyInProgress 0 short
+ timestamp {secPastEpoch=0 nsec=0 } epicsTimeStamp
status 0 short
severity 0 short
pbuffer 0x06e7bf68 void *
nRequest 1 unsigned int
dbrType 10 short
graphicLow 0.00000000000000000 double
graphHigh 0.00000000000000000 double
controlLow 0.00000000000000000 double
controlHigh 0.00000000000000000 double
+ units 0x062a5c78 "" char [8]
precision 0 short
io ioInput ioType
state stateConnected stateType
scalar 1 short
+ pdynLinkPvt->chid 0x06e6dad8 {cacCtx={...} io={...} pConnCallBack=0x003247e0 ...} oldChannelNotify *
pdynLinkPvt->dbrType 10 short
pdynLinkPvt->nRequest 1 unsigned int
+ precDynLink 0x0583eee4 {puserPvt=0x056cce70 pdynLinkPvt=0x062a5c18 status=0 ...} recDynLink *
I’m have a problem with a Windows IOC crashing during startup. Here is the environment:
-
win32-x86-debug-static
-
Visual Studio 2015
-
Base 7.0.1
-
sscan master branch
-
IOC is in the “dxp” module where I am adding support for the MicroDXP from XIA
Here is the stack trace in the thread that is crashing. The problem seems to be in RecDynLink.c and Channel Access client code.
dxpApp.exe!issue_debug_notification(const wchar_t * const message) Line 28 C++
dxpApp.exe!__acrt_report_runtime_error(const wchar_t * const message) Line 154 + 0x9 bytes C++
dxpApp.exe!abort() Line 51 + 0xa bytes C++
> dxpApp.exe!ca_client_context::vSignal(int ca_status, const char * pfilenm, int lineno, const char * pFormat, char * args) Line 414 C++
dxpApp.exe!ca_signal_formated(long ca_status, const char * pfilenm, int lineno, const char * pFormat, ...) Line 617 C++
dxpApp.exe!ca_signal_with_file_and_lineno(long ca_status, const char * message, const char * pfilenm, int lineno) Line 593 + 0x15 bytes C++
dxpApp.exe!getCallback(event_handler_args eha) Line 625 C
dxpApp.exe!getCallback::completion(epicsGuard<epicsMutex> & guard, unsigned int type, unsigned long count, const void * pData) Line 62 + 0x2d bytes C++
dxpApp.exe!dbContextReadNotifyCache::callReadNotify(epicsGuard<epicsMutex> & guard, dbChannel * dbch, unsigned int type, unsigned long count, cacReadNotify & notify) Line 96 + 0x24 bytes C++
dxpApp.exe!dbContext::callReadNotify(epicsGuard<epicsMutex> & guard, dbChannel * dbch, unsigned int type, unsigned long count, cacReadNotify & notifyIn) Line 236 C++
dxpApp.exe!dbChannelIO::read(epicsGuard<epicsMutex> & guard, unsigned int type, unsigned long count, cacReadNotify & notify, unsigned int * __formal) Line 77 C++
dxpApp.exe!ca_array_get_callback(long type, unsigned long count, oldChannelNotify * pChan, void (event_handler_args)* pfunc, void * arg) Line 357 + 0x32 bytes C++
dxpApp.exe!connectCallback(connection_handler_args cha) Line 577 + 0x16 bytes C
dxpApp.exe!oldChannelNotify::connectNotify(epicsGuard<epicsMutex> & guard) Line 93 + 0xd bytes C++
dxpApp.exe!dbChannelIO::initiateConnect(epicsGuard<epicsMutex> & guard) Line 44 + 0x1e bytes C++
dxpApp.exe!oldChannelNotify::initiateConnect(epicsGuard<epicsMutex> & guard) Line 462 + 0x19 bytes C++
dxpApp.exe!ca_create_channel(const char * name_str, void (connection_handler_args)* conn_func, void * puser, unsigned int priority, oldChannelNotify * * chanptr) Line 341 C++
dxpApp.exe!recDynLinkInp() Line 841 + 0x1e bytes C
dxpApp.exe!epicsWin32ThreadEntry(void * lpParameter) Line 499 + 0x11 bytes C
dxpApp.exe!invoke_thread_procedure(unsigned int (void *)* const procedure, void * const context) Line 92 C++
dxpApp.exe!thread_start<unsigned int (__stdcall*)(void *)>(void * const parameter) Line 115 + 0x10 bytes C++
kernel32.dll!745b8654()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
ntdll.dll!772d4a77()
ntdll.dll!772d4a47()
Any idea what could be wrong?
Thanks,
Mark