Kbase P102430: V9 only: Multitple static temp-tables returned as OUTPUT TABLE-HANDLE and order of deletion
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  23/03/2005 |
|
Status: Unverified
FACT(s) (Environment):
Progress 9.1D
Progress 9.1E
SYMPTOM(s):
Invalid widget-handle. Not initialized or points to a deleted widget. (3135)
Returning multiple static temp-tables from AppServer as OUTPUT TABLE-HANDLE
CHANGE:
Deleting the temp-table objects in a different order in the called procedure.
CAUSE:
Known issue in version 9, development aware. This problem seems to not happen in OpenEdge 10, at least not in 10.0B01.
The point of the DELETE OBJECT calls in the following code is to prevent from having memory leaks with the dynamic temp-tables created by the OUTPUT TABLE-HANDLE syntax, but it causes the problem:
/*outputTableHandleClient4.p*/
DEFINE VARIABLE h2 AS HANDLE NO-UNDO.
DEFINE VARIABLE h3 AS HANDLE NO-UNDO.
DEFINE VARIABLE h4 AS HANDLE NO-UNDO.
DEFINE VARIABLE hb2 AS HANDLE NO-UNDO.
DEFINE VARIABLE hb3 AS HANDLE NO-UNDO.
DEFINE VARIABLE hb4 AS HANDLE NO-UNDO.
DEFINE VARIABLE sh AS HANDLE NO-UNDO. /* Server handle */
CREATE SERVER sh.
sh:CONNECT("-AppService asbroker1 -H localHost").
RUN outputTableHandleServer4.p ON SERVER sh
(OUTPUT TABLE-HANDLE h2
,OUTPUT TABLE-HANDLE h3
,OUTPUT TABLE-HANDLE h4).
MESSAGE "VALID-HANDLE(h2):" VALID-HANDLE(h2) SKIP
"VALID-HANDLE(h3):" VALID-HANDLE(h3) SKIP
"VALID-HANDLE(h4):" VALID-HANDLE(h4) "h4:TYPE:" h4:TYPE
"h4:HAS-RECORDS:" h4:HAS-RECORDS
VIEW-AS ALERT-BOX INFO BUTTONS OK.
IF VALID-HANDLE(h2) THEN hb2 = h2:DEFAULT-BUFFER-HANDLE.
IF VALID-HANDLE(h3) THEN hb3 = h3:DEFAULT-BUFFER-HANDLE.
hb4 = h4:DEFAULT-BUFFER-HANDLE.
IF VALID-HANDLE(h2) THEN hb2:FIND-FIRST().
IF VALID-HANDLE(h3) THEN hb3:FIND-FIRST().
hb4:FIND-FIRST().
MESSAGE
IF VALID-HANDLE(h2) THEN h2:DEFAULT-BUFFER-HANDLE:BUFFER-FIELD("i"):BUFFER-VALUE ELSE "no h2" SKIP
IF VALID-HANDLE(h3) THEN h3:DEFAULT-BUFFER-HANDLE:BUFFER-FIELD("i"):BUFFER-VALUE ELSE "no h3" SKIP
h4:DEFAULT-BUFFER-HANDLE:BUFFER-FIELD("i"):BUFFER-VALUE SKIP
VIEW-AS ALERT-BOX INFO BUTTONS OK.
/* outputTableHandleServer4.p*/
DEF OUTPUT PARAM TABLE-HANDLE h2.
DEF OUTPUT PARAM TABLE-HANDLE h3.
DEF OUTPUT PARAM TABLE-HANDLE h4.
DEF TEMP-TABLE tt2 LIKE salesrep
FIELD i AS INT INITIAL 2
INDEX i IS PRIMARY UNIQUE i.
DEF TEMP-TABLE tt3 LIKE customer
FIELD i AS INT INITIAL 3
INDEX i IS PRIMARY UNIQUE i.
DEF TEMP-TABLE tt4 LIKE order
FIELD i AS INT INITIAL 4
INDEX i IS PRIMARY UNIQUE i.
h2 = TEMP-TABLE tt2:HANDLE.
h3 = TEMP-TABLE tt3:HANDLE.
h4 = TEMP-TABLE tt4:HANDLE.
CREATE tt2.
CREATE tt3.
CREATE tt4.
DELETE OBJECT h2.
DELETE OBJECT h3.
DELETE OBJECT h4.
FIX:
Delete the temp-table objects in a different order as shown bellow:
[...]
DELETE OBJECT h4.
DELETE OBJECT h3.
DELETE OBJECT h2.
[...]