[pypy-commit] lang-smalltalk stmgc-c7: fixed OS lock primitives so that they raise a PrimitiveFailedError in case of misuse

Conrad Calmez noreply at buildbot.pypy.org
Thu Jul 10 18:25:13 CEST 2014


Author: Conrad Calmez <conrad at calmez.net>
Branch: stmgc-c7
Changeset: r894:9b35a2b871a0
Date: 2014-07-10 18:25 +0200
http://bitbucket.org/pypy/lang-smalltalk/changeset/9b35a2b871a0/

Log:	fixed OS lock primitives so that they raise a PrimitiveFailedError
	in case of misuse credit goes to: @hubx

diff --git a/images/Squeak4.5-12568.changes b/images/Squeak4.5-12568.changes
--- a/images/Squeak4.5-12568.changes
+++ b/images/Squeak4.5-12568.changes
@@ -15094,4 +15094,4 @@
             ifFalse: [ self organizeMeetingWith: chameleon. first := nil. ] ] atomic value.
"
      tmpString :=  'A Chameneos was in the meeting place and first is now: ' . 
 	SPyVM print: tmpString. "! !
!CPBChameneos methodsFor: 'as yet unclassified' stamp: 'hh 7/10/2014 15:12' prior: 34771049!
run: meetingPlace
     [ color == #faded ] whileFalse: [
	  "SPyVM print: 'Chameneos goes to meeting place' , self color."
         meetingPlace reachedBy: self.
-        waitingForPair lock.
        "SPyVM print: 'Chameneos met another one and releases lock' , self color." ]! !

----QUIT----{10 July 2014 . 3:13 pm} Squeak4.5-benchmarks.image priorSource: 1252802!

----STARTUP----{10 July 2014 . 3:16:52 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/images/Squeak4.5-benchmarks.image!


----QUIT/NOSAVE----{10 July 2014 . 3:17:21 pm} Squeak4.5-benchmarks.image priorSource: 1253908!

----QUIT/NOSAVE----{10 July 2014 . 1:19:47 pm} Squeak4.5-benchmarks.image priorSource: 1253908!

----STARTUP----{10 July 2014 . 5:00:09 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/images/Squeak4.5-benchmarks.image!

!Integer methodsFor: '*SPy-Benchmarks' stamp: 'hh 7/10/2014 17:01'!
OSLockTest
	| lock |
	lock := OSLock new.
	lock release.! !

----QUIT----{10 July 2014 . 5:01:29 pm} Squeak4.5-benchmarks.image priorSource: 1253908!

----STARTUP----{10 July 2014 . 5:04:01 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/images/Squeak4.5-benchmarks.image!


----QUIT/NOSAVE----{10 July 2014 . 5:05:51 pm} Squeak4.5-benchmarks.image priorSource: 1254571!

----STARTUP----{10 July 2014 . 5:35:54 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/images/Squeak4.5-benchmarks.image!


----QUIT/NOSAVE----{10 July 2014 . 5:36:06 pm} Squeak4.5-benchmarks.image priorSource: 1254571!

----STARTUP----{10 July 2014 . 5:44:18 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/Squeak4.5-12568.image!


----QUIT/NOSAVE----{10 July 2014 . 5:44:25 pm} Squeak4.5-12568.image priorSource: 1254571!
\ No newline at end of file
+        waitingForPair lock.
        "SPyVM print: 'Chameneos met another one and releases lock' , self color." ]! !

----QUIT----{10 July 2014 . 3:13 pm} Squeak4.5-benchmarks.image priorSource: 1252802!

----STARTUP----{10 July 2014 . 3:16:52 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/images/Squeak4.5-benchmarks.image!


----QUIT/NOSAVE----{10 July 2014 . 3:17:21 pm} Squeak4.5-benchmarks.image priorSource: 1253908!

----QUIT/NOSAVE----{10 July 2014 . 1:19:47 pm} Squeak4.5-benchmarks.image priorSource: 1253908!

----STARTUP----{10 July 2014 . 5:00:09 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/images/Squeak4.5-benchmarks.image!

!Integer methodsFor: '*SPy-Benchmarks' stamp: 'hh 7/10/2014 17:01'!
OSLockTest
	| lock |
	lock := OSLock new.
	lock release.! !

----QUIT----{10 July 2014 . 5:01:29 pm} Squeak4.5-benchmarks.image priorSource: 1253908!

----STARTUP----{10 July 2014 . 5:04:01 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/images/Squeak4.5-benchmarks.image!


----QUIT/NOSAVE----{10 July 2014 . 5:05:51 pm} Squeak4.5-benchmarks.image priorSource: 1254571!

----STARTUP----{10 July 2014 . 5:35:54 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/images/Squeak4.5-benchmarks.image!


----QUIT/NOSAVE----{10 July 2014 . 5:36:06 pm} Squeak4.5-benchmarks.image priorSource: 1254571!

----STARTUP----{10 July 2014 . 5:44:18 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/Squeak4.5-12568.image!


----QUIT/NOSAVE----{10 July 2014 . 5:44:25 pm} Squeak4.5-12568.image priorSource: 1254571!

----QUIT/NOSAVE----{10 July 2014 . 6:11:07 pm} Squeak4.5-12568.image priorSource: 1254571!

----STARTUP----{10 July 2014 . 6:11:32 pm} as /Users/conrad/Repositories/master-project/lang-smalltalk/images/Squeak4.5-12568.image!


----QUIT/NOSAVE----{10 July 2014 . 6:22:16 pm} Squeak4.5-12568.image priorSource: 1254571!
\ No newline at end of file
diff --git a/spyvm/primitives.py b/spyvm/primitives.py
--- a/spyvm/primitives.py
+++ b/spyvm/primitives.py
@@ -1548,23 +1548,29 @@
 
 @expose_primitive(OS_LOCK_LOCK, unwrap_spec=[object], no_result=True)
 def func(interp, s_frame, w_rcvr):
-    from rpython.rlib import rthread
+    from rpython.rlib.rthread import RThreadError
 
     if not isinstance(w_rcvr, model.W_PointersObject):
-            raise PrimitiveFailedError("OS_LOCK_LOCK primitive was not called on an OSLock Object")
+        raise PrimitiveFailedError("OS_LOCK_LOCK primitive was not called on an OSLock Object")
 
     lock_shadow = w_rcvr.as_special_get_shadow(interp.space, shadow.OSLockShadow)
-    lock_shadow.os_lock()
+    try:
+        lock_shadow.os_lock()
+    except RThreadError as e:
+        raise PrimitiveFailedError("OS_LOCK_LOCK primitive failed: " + str(e))
 
 @expose_primitive(OS_LOCK_RELEASE, unwrap_spec=[object], no_result=True)
 def func(interp, s_frame, w_rcvr):
-    from rpython.rlib import rthread
+    from rpython.rlib.rthread import RThreadError
 
     if not isinstance(w_rcvr, model.W_PointersObject):
-            raise PrimitiveFailedError("OS_LOCK_LOCK primitive was not called on an OSLock Object")
+        raise PrimitiveFailedError("OS_LOCK_LOCK primitive was not called on an OSLock Object")
 
     lock_shadow = w_rcvr.as_special_get_shadow(interp.space, shadow.OSLockShadow)
-    lock_shadow.os_release()
+    try:
+        lock_shadow.os_release()
+    except RThreadError as e:
+        raise PrimitiveFailedError("OS_LOCK_RELEASE primitive failed: " + str(e))
 
 # ___________________________________________________________________________
 # BlockClosure Primitives


More information about the pypy-commit mailing list