Folks,
I am quite sure this is a bug in base. I modified
libCom/osi/epicsTime.cpp so it just prints an error, rather than throwing an
exception, if epicsTimeGetCurrent() returns an error:
corvette:src/libCom/osi>cvs diff epicsTime.cpp
Index: epicsTime.cpp
===================================================================
RCS file:
/net/phoebus/epicsmgr/cvsroot/epics/base/src/libCom/osi/epicsTime.cpp,v
retrieving revision 1.25.2.20
diff -u -r1.25.2.20 epicsTime.cpp
--- epicsTime.cpp 18 Apr 2008
18:39:19 -0000 1.25.2.20
+++ epicsTime.cpp 11 May 2009
20:30:01 -0000
@@ -192,7 +192,8 @@
epicsTimeStamp current;
int status = epicsTimeGetCurrent
(¤t);
if (status) {
- throwWithLocation (
unableToFetchCurrentTime () );
+printf("epicsTime::getCurrent, unable to fetch current
time\n");
+ //throwWithLocation (
unableToFetchCurrentTime () );
}
return epicsTime ( current );
}
With this change I observe that when the IOC starts up I see one of
those error messages, and no more. I think we still have a timing problem
where the generalTime system is not up and running on Windows before it is
first being called. I have been using this patched version of 3.14.10 for
a while with no problems, but my application recently got more complex, with
more DLLs being loaded when the application starts. I believe that is
slowing things down enough when the application starts that we are now seeing
another problem. The version of osi/os/WIN32/osdTime.cpp that I am using
is effectively 1.38.2.8, which Andrew and I worked on to fix similar problems
in 3.14.10.
$ ../../bin/win32-x86/prosilicaApp.exe st.cmd.win32
epicsTime::getCurrent, unable to fetch current time
< envPaths.win32
epicsEnvSet("ARCH","win32-x86")
…
Mark
From: Mark Rivers
Sent: Monday, May 11, 2009 2:51 PM
To: Andrew Johnson; 'Eric Norum'
Subject: Problem with WIN32
Folks,
I am getting a crash when I start the areaDetector IOC on
win32-x86 and win32-x86-debug. It looks like it might be a problem in
base, perhaps related to the bug Andrew and I previously fixed with the timer
not being created before it was being used. Here is the trace. The
problem is in the 7’th line from the bottom, copied here:
simDetectorApp.exe!throwExceptionWithLocation<epicsTime::unableToFetchCurrentTime>(const
epicsTime::unableToFetchCurrentTime & parm={...}, const char *
pFileName=0x00616620, unsigned int lineNo=195) Line
74 C++
This is happening right when the IOC starts up, even without
an st.cmd file.
Mark
ntdll.dll!7c90eb94()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
user32.dll!7e419418()
user32.dll!7e42dba8()
user32.dll!7e42593f()
user32.dll!7e43a91e()
>
simDetectorApp.exe!_output_s_l(_iobuf * stream=0x00000000, const char *
format=0x001449b0, localeinfo_struct * plocinfo=0x00144690, char *
argptr=0x00012012) Line 1164 + 0x17
bytes C++
user32.dll!7e466278()
user32.dll!7e450617()
user32.dll!7e4505cf()
simDetectorApp.exe!__crtMessageBoxA(const char * lpText=0x003b8620, const char
* lpCaption=0x0061fe50, unsigned int uType=73746) Line
145 C
simDetectorApp.exe!__crtMessageWindowA(int nRptType=1, const char *
szFile=0x00000000, const char * szLine=0x00000000, const char *
szModule=0x00000000, const char * szUserMessage=0x003b9694) Line 420 +
0x16 bytes C
simDetectorApp.exe!_VCrtDbgReportA(int nRptType=1, const char *
szFile=0x00000000, int nLine=0, const char * szModule=0x00000000, const char *
szFormat=0x0061e2c0, char * arglist=0x003be728) Line 417 + 0x28
bytes C
simDetectorApp.exe!_CrtDbgReportV(int nRptType=1, const char *
szFile=0x00000000, int nLine=0, const char * szModule=0x00000000, const char *
szFormat=0x0061e2c0, char * arglist=0x003be728) Line 300 + 0x1d
bytes C
simDetectorApp.exe!_CrtDbgReport(int nRptType=1, const char *
szFile=0x00000000, int nLine=0, const char * szModule=0x00000000, const char *
szFormat=0x0061e2c0, ...) Line 317 + 0x1d bytes C
simDetectorApp.exe!_NMSG_WRITE(int rterrnum=10) Line 197 + 0x18
bytes C
simDetectorApp.exe!abort() Line 59 + 0x7
bytes C
simDetectorApp.exe!terminate() Line
136 C++
simDetectorApp.exe!__CxxUnhandledExceptionFilter(_EXCEPTION_POINTERS *
pPtrs=0x003bf1cc) Line 72 C++
kernel32.dll!7c863016()
simDetectorApp.exe!_XcptFilter(unsigned long xcptnum=3765269347,
_EXCEPTION_POINTERS * pxcptinfoptrs=0x003bf1cc) Line 237 + 0xa
bytes C
simDetectorApp.exe!_callthreadstartex() Line 350 + 0x17 bytes C
simDetectorApp.exe!@_EH4_CallFilterFunc@8() + 0x12 bytes Asm
simDetectorApp.exe!_except_handler4(_EXCEPTION_RECORD *
ExceptionRecord=0x003bf2c0, _EXCEPTION_REGISTRATION_RECORD *
EstablisherFrame=0x003bff98, _CONTEXT * ContextRecord=0x003bf2e0, void *
DispatcherContext=0x003bf294) + 0xb7 bytes C
ntdll.dll!7c9037bf()
ntdll.dll!7c90378b()
ntdll.dll!7c937860()
ntdll.dll!7c90eafa()
kernel32.dll!7c812a5b()
ntdll.dll!7c9106eb()
ntdll.dll!7c911538()
kernel32.dll!7c812a5b()
ntdll.dll!7c911596()
ntdll.dll!7c9106eb()
ntdll.dll!7c9106eb()
ntdll.dll!7c911538()
ntdll.dll!7c919a9c()
ntdll.dll!7c919b3f()
ntdll.dll!7c919aeb()
ntdll.dll!7c911538()
ntdll.dll!7c919aeb()
ntdll.dll!7c919d27()
ntdll.dll!7c919a9c()
ntdll.dll!7c919b3f()
ntdll.dll!7c919aeb()
kernel32.dll!7c812a5b()
simDetectorApp.exe!fetchWin32ThreadGlobal() Line 183 + 0x11
bytes C
simDetectorApp.exe!_CxxThrowException(void * pExceptionObject=0x003bf650, const
_s__ThrowInfo * pThrowInfo=0x0063e0e0) Line
166 C++
simDetectorApp.exe!throwExceptionWithLocation<epicsTime::unableToFetchCurrentTime>(const
epicsTime::unableToFetchCurrentTime & parm={...}, const char *
pFileName=0x00616620, unsigned int lineNo=195) Line
74 C++
simDetectorApp.exe!epicsTime::getCurrent() Line 195 + 0x18
bytes C++
simDetectorApp.exe!epicsThreadCallEntryPoint(void * pPvt=0x003a96f4) Line
68 + 0xc bytes C++
simDetectorApp.exe!epicsWin32ThreadEntry(void * lpParameter=0x003a9a68)
Line 498 + 0x11 bytes C
simDetectorApp.exe!_callthreadstartex() Line 348 + 0xf
bytes C
simDetectorApp.exe!_threadstartex(void * ptd=0x003a9ac8) Line
331 C
kernel32.dll!7c80b683()