Files received. Thanks.
This log is interesting, but I don't think it really tells the whole story.
I started at the top, auditing the path of the fatal error handler. This is the first time an error appears in the log, but at this point, the application is already on its 29th restart:
Code:
...
2009/06/10 10:51:05.093: fc_MainApp<==fc_Logger
2009/06/10 10:51:05.093: [69] Wait for Call
2009/06/10 10:51:05.093: TIMEOUT is '0'
2009/06/10 10:51:05.093: WARNING: TIMEOUT '0' evaluates to 0 and is interpreted as no timeout
2009/06/10 10:51:05.093: Rings is '0'
2009/06/10 10:51:05.093: Connection Delay is '500'
2009/06/10 10:51:05.093: Wait for 0 rings and then pickup
2009/06/10 10:51:05.093: ERROR: Port already in use
2009/06/10 10:51:05.093: FATAL
2009/06/10 10:51:05.093: Attempting to jump to Fatal Error Global Event label: 'FINISH_ERR'
2009/06/10 10:51:05.093: Setting system variable '@FATAL' to ''
2009/06/10 10:51:05.093: [67] Label
2009/06/10 10:51:05.093: Label: FINISH_ERR
...
It concerns me that Wait for Call could not access the telephony port, and wondering how it got to that state. The app dutifully jumps to the error handler.
Notice that after TeleFlow finds your error handler, it clears the @FATAL setting. This prevents a subsequent application error from calling the same error handler recursively. At the end of this log, before the access violations start, the warning "Fatal label undefined!" could be an indication that the error handler had been cleared. Ordinarily, this is not a problem, but a catch-all to ensure that an un-handled error winds its way back to the final exit. The larger concern is why that un-winding got confused.
Returning to the log example above, the label 'FINISH_ERR' runs some clean-up code, and then calls the flowchart 'fc_Exit' is called, which sets new a error handler:
Code:
...
2009/06/10 10:51:05.093: fc_MainApp==>fc_Exit
2009/06/10 10:51:05.093: [1] START
2009/06/10 10:51:05.093: [8] Global Event
2009/06/10 10:51:05.093: Label is 'EXIT_END'
2009/06/10 10:51:05.093: Setting system variable '@FATAL' to 'EXIT_END'
2009/06/10 10:51:05.093: [11] Global Event
2009/06/10 10:51:05.093: Label is 'EXIT_END'
2009/06/10 10:51:05.093: Setting system variable '@HANGUP' to 'EXIT_END'
...
This is legitimate code, and will only cause you problems if 'EXIT_END' points back into the main application flow. Our recommended best practice is to ensure all Fatal errors find their way to the exit of the application. Based on the name of your label, I suspect all is well here.
Your exit code eventually gets to this point:
Code:
...
2009/06/10 10:51:05.093: [13] Compare
2009/06/10 10:51:05.093: First Value '@HOOK_STATUS' evaluates to 'OFF-HOOK'
2009/06/10 10:51:05.093: Second Value is 'OFF-HOOK'
2009/06/10 10:51:05.093: @HOOK_STATUS = OFF-HOOK?
2009/06/10 10:51:05.093: (string):OFF-HOOK = (string):OFF-HOOK?
2009/06/10 10:51:05.093: TRUE
2009/06/10 10:51:05.093: [3] Play
2009/06/10 10:51:05.093: Script code is 'ER-DificulTec'
2009/06/10 10:51:05.093: Script code 'ER-DificulTec' corresponds to file 'vox\spn\scripts\er-dificultec.WAV'
2009/06/10 10:51:05.093: Playing 'E:\Applications\IVR_RD\vox\spn\scripts\er-dificultec.WAV'
2009/06/10 10:51:05.109: ERROR: QueryDigit::adiPeekDigit failed
2009/06/10 10:51:05.109: (5) CTAERR_INVALID_CTAHD
2009/06/10 10:51:05.109: FAILURE
2009/06/10 10:51:05.109: Hanging up
2009/06/10 10:51:08.109:
2009/06/10 10:51:08.109: Application restart 30
...
This chunk of code is very concerning. @HOOK_STATUS should not be 'OFF-HOOK' at this point, because Wait For Call never got to process a call. The subsequent Play gets an error because none of the Port setup code got to execute. This is essentially a continuation of the first error above in the Wait For Call step. The line that reads "Hanging up" is an indication that TeleFlow is trying to close the port that it never got to open, and then the app just unceremoniously exits. This, I
think, is the source of the later access violation exceptions. At minimum, its a clue.
What we don't know is just how the port got into this state in the first place. To answer that, I need to see the first few application crashes. Please follow my earlier suggestion to capture the first 6 failures. Hopefully that will shed more light on this situation.