VM Maker: VMMaker.oscog-eem.2433.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: VMMaker.oscog-eem.2433.mcz

commits-2
 
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]!