Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2433.mcz==================== Summary ====================
Name: VMMaker.oscog-eem.2433
Author: eem
Time: 24 August 2018, 2:55:51.817366 pm
UUID: 185078c8-fd93-4414-9053-5a495f3762a6
Ancestors: VMMaker.oscog-eem.2432
Fix a slip in primitiveFailForFFIException:at:. If it fails the primitive, short cutting the return side of an FFI call it is its responsibility to own the VM and clear inFFIFlags.
=============== Diff against VMMaker.oscog-eem.2432 ===============
Item was changed:
----- Method: InterpreterPrimitives>>primitiveFailForFFIException:at: (in category 'primitive support') -----
primitiveFailForFFIException: exceptionCode at: pc
<var: 'exceptionCode' type: #usqLong>
<var: 'pc' type: #usqInt>
"Set PrimErrOSError primitive failure and associated osErrorCode. Under
control of the ffiExceptionResponse flag, if in a primitive with an error code
and the inFFIFlags indicate we're in an FFI call, then fail the primitive.
ffiExceptionResponse < 0 never fail
ffiExceptionResponse = 0 fail if method has a primitive error code (default)
ffiExceptionResponse > 0 always fail"
<api>
((inFFIFlags noMask: DisownVMForFFICall) "i.e. not in an FFI call"
or: [ffiExceptionResponse < 0]) ifTrue: "i.e. never fail"
[^self].
osErrorCode := self cCoerceSimple: exceptionCode to: #sqLong.
exceptionPC := pc.
primFailCode := PrimErrFFIException.
(ffiExceptionResponse > 0 "always fail..."
or: [(objectMemory isOopCompiledMethod: newMethod)
and: [self methodUsesPrimitiveErrorCode: newMethod]]) ifTrue:
+ [self ownVM: DisownVMForFFICall. "To take ownership but importantly to reset inFFIFlags"
+ self activateFailingPrimitiveMethod]!
- [self activateFailingPrimitiveMethod]!