Kbase P148251: Application hangs when procedure is closed immediately after making asynchronous call to AppServer
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  25/06/2009 |
|
Status: Unverified
SYMPTOM(s):
Application hangs when procedure is closed immediately after making asynchronous call to AppServer
Application window stops partway through repainting.
Process is at about 50% CPU utilization according to Windows Task Manager while it hangs.
Process may eventually crash, generating the following protrace:
//=====================================================
PROGRESS stack trace as of Tue Jun 23 10:07:17 2009
//=====================================================
Exception code: C0000005 ACCESS_VIOLATION
Fault address: 1021A78F 01:0021978F c:\program files\dlc101a\bin\prow32.dll
Registers:
EAX:00000001
EBX:0103113C
ECX:00000002
EDX:00000002
ESI:01127BE8
EDI:02BDED9C
CS:EIP:001B:1021A78F
SS:ESP:0023:0012FE38 EBP:00000000
DS:0023 ES:0023 FS:003B GS:0000
Flags:00210206
Call Stack:
Address Frame
//=====================================================
PROGRESS stack trace as of Tue Jun 23 10:07:18 2009
//=====================================================
Exception code: C0000005 ACCESS_VIOLATION
Fault address: 1021A78F 01:0021978F c:\program files\dlc101a\bin\prow32.dll
Registers:
EAX:00000001
EBX:0103113C
ECX:00000002
EDX:00000002
ESI:01127BE8
EDI:02BDED9C
CS:EIP:001B:1021A78F
SS:ESP:0023:00000008 EBP:00000000
DS:0023 ES:0023 FS:003B GS:0000
Flags:00210206
Call Stack:
Address Frame
FACT(s) (Environment):
No errors in database log.
Application window can be closed with window close button ("x" in upper right corner).
Default EVENT-PROCEDURE of THIS-PROCEDURE is used for asynchronous calls.
All Supported Operating Systems
Progress 9.x
OpenEdge 10.x
CAUSE:
Application is exited before the asynchronous call has completed. When the call is complete, the calling procedure is no longer running, so it is invoked again as the default event procedure. When the procedure is run again from the beginning, it makes a new asynchronous call, starting an infinite loop.
FIX:
Insert the following code in the exit logic to prevent the procedure from exiting before the asynchronous call has completed:
IF (hMyAsyncRequestHandle:COMPLETE = FALSE) THEN
WAIT-FOR PROCEDURE-COMPLETE of hMyAsyncRequestHandle.