Oppolzer - Informatik / Blog


Blog-Hauptseite      Neuester Artikel      Älterer Artikel      Neuerer Artikel      Älterer gleiche Kategorie      Neuerer gleiche Kategorie

PL1-L - Merkwürdige Fehler im Zusammenspiel mit PL/1 und C (ON ERROR)

Subject:

Re: ON ERROR GOTO ... ??

From:

Bernd Oppolzer <bernd.oppolzer@T-ONLINE.DE>

Reply-To:

PL1 (language) discussions <PL1-L@LISTSERV.DARTMOUTH.EDU>

Date:

2012.06.21 23:38:54


From: P.F.
Sent: Thursday, 21 June 2012 9:56 PM


> On 6/21/2012 7:16 AM, Bernd Oppolzer wrote:
>> You are right, the
>>
>> ON ERROR BEGIN;
>> ON ERROR GOTO ENDE;
>> ...
>> END;
>>
>> unit works as expected.
>>
>> I tested it using a little test program which allocated buffer of 1
>> million bytes
>> in a loop (1000 times). After the 400-th iteration the error unit was
>> entered,
>> following a STORAGE condition, which is reasonable, due to region size
>> etc.
>> The iterations continued as expected, but because there was no STORAGE,
>> starting from then, the error unit was entered at every iteration.
>>
>> Now the difference to the real thing is:
>>
>> the storage is not allocated using PL/1-ALLOC, but the C++ math lib
>> allocates the storage; maybe there is even Xerces or other software
>> packages involved (some hundred modules, I don't know all of them).
>> So I'm not sure if the short-on-storage condition below is reflected by
>> a PL/1 STORAGE condition (maybe not). And: it could well be that
>> there are additional error handlers below this PL/1 level (maybe
>> C++ try/catch logic).
>
> God knows what C and C++ do, they have only the most basic ideas of
> error handling.  What I would do if you want to keep the _idea_ of this
> logic is have the first ERROR ON-unit execute "ON ERROR SYSTEM;" , try
> its cleanup,  reexecute the call _in the ON-Unit_, and then GOTO the
> next statement following the original CALL, which should be changed to
> "REVERT ERROR;".  That way you only get one shot at recovery and
> shouldn't be able to get an infinite loop.

There's no evidence yet that the loop is in the error-handling.
To prove one way or the other, SNAP needs to be inserted
after ON ERROR in the two statements that use BEGIN blocks.

Blog-Hauptseite      Neuester Artikel      Älterer Artikel      Neuerer Artikel      Älterer gleiche Kategorie      Neuerer gleiche Kategorie