[Vm-dev] VM Maker: VMMaker.oscog-eem.2433.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Aug 24 21:56:26 UTC 2018

Eliot Miranda uploaded a new version of VMMaker to project VM Maker:

==================== 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"
  	((inFFIFlags noMask: DisownVMForFFICall)	"i.e. not in an FFI call"
  	 or: [ffiExceptionResponse < 0]) ifTrue:		"i.e. never fail"
  	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]!

More information about the Vm-dev mailing list