Bug 44375

GemStone/S 64 Bit

3.2.16, 3.2.15, 3.2.14, 3.2.13, 3.2.12, 3.2.11, 3.2.10, 3.2.9, 3.2.8.1, 3.2.8, 3.2.7, 3.2.6, 3.2.5, 3.2.4, 3.2.3, 3.2.2, 3.2.1, 3.2

All Platforms

3.3

Exception handler #resume from primitive operation returns nil

If an exception handler is triggered from within low-level C code in a primitive, nil is incorrectly returned as the result of the Smalltalk method that called the primitive.

For example, if an exception handler is defined for AlmostOutOfMemory that exits using #resume, and that exception is triggered by the concatenate operator #,  (which calls primitive 615) from the code:

result := string1 , string2.

The result will be nil.

Workaround

Refactor code so that problematic operations are isolated in their own block and can be restarted from the beginning, so you can use #retry in the exception handler code that covers the block.


Last updated: 7/25/14