Kbase P136657: 4GL/ABL: Session crashes when trying to delete a dynamic buffer object from a procedure called from
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  6/23/2010 |
|
Status: Verified
SYMPTOM(s):
4GL/ABL: Session crashes when trying to delete a dynamic buffer object from a procedure called from a write trigger for that buffer.
Crash when deleting a Dynamic Buffer object within a procedure called from a WRITE trigger for that buffer
Stack trace from protrace file:
vsFileMove
vsPropGetB
vsUnregisterWindow
DllStartup
LdrInitializeThunk
RtlDestroyEnvironment
IsValidLocale
ExitProcess
exit
exit
RegisterWaitForInputIdle
The following code sample demonstrates the issue. The DELETE OBJECT hBuffer. statement in the syncwrt internal procedure causes the 4GL/ABL session to crash:
ON WRITE OF ITEM NEW BUFFER newrec OLD BUFFER oldrec DO:
RUN syncwrt (INPUT BUFFER newrec:HANDLE,
INPUT BUFFER oldrec:HANDLE).
END.
FOR EACH ITEM WHERE item.in-entity = "NB":
DO TRANSACTION:
IF item.low-level EQ 9 THEN
item.low-level = 0.
ELSE
item.low-level = 9.
END.
END.
RETURN.
PROCEDURE syncwrt:
DEFINE INPUT PARAMETER hnewrec AS HANDLE NO-UNDO.
DEFINE INPUT PARAMETER holdrec AS HANDLE NO-UNDO.
DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
CREATE BUFFER hBuffer FOR TABLE hnewrec:NAME.
hBuffer:FIND-FIRST("WHERE " + hBuffer:NAME + ".in-entity eq ~'NS~' AND " +
hBuffer:NAME + ".item-no eq ~'" + hnewrec::item-no + "~'",
EXCLUSIVE-LOCK) NO-ERROR.
IF NOT hBuffer:AVAILABLE THEN
hBuffer:BUFFER-CREATE().
hBuffer::in-entity = "NS".
hBuffer:BUFFER-COPY(hnewrec,"in-entity").
DELETE OBJECT hBuffer.
END PROCEDURE.
FACT(s) (Environment):
All Supported Operating Systems
OpenEdge 10.1B
OpenEdge 10.1C
CAUSE:
Bug# OE00177009
CAUSE:
When the buffer object that is being operated on by the WRITE trigger is deleted, the session is not detecting that deletion in time and attempting to access memory that has been vacated.
FIX:
Upgrade to OpenEdge Release 10.1C03 or later or 10.2A01 or later