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]!
vm-dev@lists.squeakfoundation.org