[pypy-commit] lang-smalltalk stmgc-c7: Added OSLock class to access rthread.lock and corresponding primitives.
Patrick Rein
noreply at buildbot.pypy.org
Thu Jul 3 15:31:30 CEST 2014
Author: Patrick Rein <patrick.rein at student.hpi.uni-potsdam.de>
Branch: stmgc-c7
Changeset: r851:3f97fdcac997
Date: 2014-07-03 15:26 +0200
http://bitbucket.org/pypy/lang-smalltalk/changeset/3f97fdcac997/
Log: Added OSLock class to access rthread.lock and corresponding
primitives.
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
@@ -758,4 +758,4 @@
self fieldNew: swapField.
].
- ^ self field! !
----QUIT----{22 May 2014 . 3:33:07 pm} Squeak4.5-12568.image priorSource: 93437!
----STARTUP----{22 May 2014 . 3:33:13 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/Squeak4.5-12568.image!
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'hh 5/22/2014 15:33'!
gameLifeOfLife
STMSimulation benchmark.! !
----QUIT----{22 May 2014 . 3:34:03 pm} Squeak4.5-12568.image priorSource: 110218!
----STARTUP----{22 May 2014 . 3:34:57 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/Squeak4.5-12568.image!
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'hh 5/22/2014 15:35'!
gameOfLife
STMSimulation benchmark.! !
Integer removeSelector: #gameLifeOfLife!
----QUIT----{22 May 2014 . 3:35:14 pm} Squeak4.5-12568.image priorSource: 110526!
----STARTUP----{22 May 2014 . 3:36:22 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/Squeak4.5-12568.image!
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'hh 5/22/2014 15:36' prior: 33665224!
gameOfLife
STMSimulation benchmark2.! !
----QUIT----{22 May 2014 . 3:36:45 pm} Squeak4.5-12568.image priorSource: 110873!
----STARTUP----{22 May 2014 . 3:36:49 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/Squeak4.5-12568.image!
----QUIT----{22 May 2014 . 3:36:53 pm} Squeak4.5-12568.image priorSource: 111195!
----STARTUP----{22 May 2014 . 3:36:56 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/Squeak4.5-12568.image!
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'hh 5/22/2014 15:37' prior: 33665587!
gameOfLife
SPyVM print: STMSimulation benchmark2.! !
----QUIT----{22 May 2014 . 3:37:32 pm} Squeak4.5-12568.image priorSource: 111392!
----STARTUP----{22 May 2014 . 3:38:15 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/Squeak4.5-12568.image!
----QUIT----{22 May 2014 . 3:38:35 pm} Squeak4.5-12568.image priorSource: 111727!
----STARTUP----{2 June 2014 . 12:57:18 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/Squeak4.5-12568.image!
!Integer methodsFor: 'benchmarks' stamp: 'hh 6/2/2014 12:58'!
benchStmParallelWarmed
10 timesRepeat: [SPyVM print: (self benchStmParallel)].! !
----QUIT----{2 June 2014 . 12:58:21 pm} Squeak4.5-12568.image priorSource: 111924!
\ No newline at end of file
+ ^ self field! !
----QUIT----{22 May 2014 . 3:33:07 pm} Squeak4.5-12568.image priorSource: 93437!
----STARTUP----{22 May 2014 . 3:33:13 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/Squeak4.5-12568.image!
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'hh 5/22/2014 15:33'!
gameLifeOfLife
STMSimulation benchmark.! !
----QUIT----{22 May 2014 . 3:34:03 pm} Squeak4.5-12568.image priorSource: 110218!
----STARTUP----{22 May 2014 . 3:34:57 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/Squeak4.5-12568.image!
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'hh 5/22/2014 15:35'!
gameOfLife
STMSimulation benchmark.! !
Integer removeSelector: #gameLifeOfLife!
----QUIT----{22 May 2014 . 3:35:14 pm} Squeak4.5-12568.image priorSource: 110526!
----STARTUP----{22 May 2014 . 3:36:22 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/Squeak4.5-12568.image!
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'hh 5/22/2014 15:36' prior: 33665224!
gameOfLife
STMSimulation benchmark2.! !
----QUIT----{22 May 2014 . 3:36:45 pm} Squeak4.5-12568.image priorSource: 110873!
----STARTUP----{22 May 2014 . 3:36:49 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/Squeak4.5-12568.image!
----QUIT----{22 May 2014 . 3:36:53 pm} Squeak4.5-12568.image priorSource: 111195!
----STARTUP----{22 May 2014 . 3:36:56 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/Squeak4.5-12568.image!
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'hh 5/22/2014 15:37' prior: 33665587!
gameOfLife
SPyVM print: STMSimulation benchmark2.! !
----QUIT----{22 May 2014 . 3:37:32 pm} Squeak4.5-12568.image priorSource: 111392!
----STARTUP----{22 May 2014 . 3:38:15 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/Squeak4.5-12568.image!
----QUIT----{22 May 2014 . 3:38:35 pm} Squeak4.5-12568.image priorSource: 111727!
----STARTUP----{2 June 2014 . 12:57:18 pm} as /home/hub/hpi/stm/src/lang-smalltalk/images/Squeak4.5-12568.image!
!Integer methodsFor: 'benchmarks' stamp: 'hh 6/2/2014 12:58'!
benchStmParallelWarmed
10 timesRepeat: [SPyVM print: (self benchStmParallel)].! !
----QUIT----{2 June 2014 . 12:58:21 pm} Squeak4.5-12568.image priorSource: 111924!
----STARTUP----{26 June 2014 . 2:47:09 pm} as D:\code\python\spy-vm\lang-smalltalk\images\Squeak4.5-12568.image!
'From Squeak4.4 of 28 April 2013 [latest update: #12627] on 26 June 2014 at 2:46:54 pm'!
Object subclass: #OSLock
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Kernel-STM'!
Object subclass: #OSLock
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Kernel-STM'!
!OSLock methodsFor: 'as yet unclassified' stamp: 'pre 6/26/2014 14:25'!
lock
<primitive: 792>! !
!OSLock methodsFor: 'as yet unclassified' stamp: 'pre 6/26/2014 14:26'!
release
<primitive: 793>! !
----End fileIn of a stream----!
'From Squeak4.4 of 28 April 2013 [latest update: #12627] on 26 June 2014 at 2:46:45 pm'!
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'hh 5/22/2014 14:48' prior: 33647508!
parallelForkTest
| p |
FileStream stdout nextPutAll: 'starting stm process.'.
p := [ 1 + 1. ] parallelFork.
p wait! !
----End fileIn of D:\code\python\spy-vm\lang-smalltalk\images\Integer-parallelForkTest.st----!
----QUIT----{26 June 2014 . 2:47:49 pm} Squeak4.5-12568.image priorSource: 112268!
----STARTUP----{26 June 2014 . 2:49:11 pm} as D:\code\python\spy-vm\lang-smalltalk\images\Squeak4.5-12568.image!
'From Squeak4.4 of 28 April 2013 [latest update: #12627] on 26 June 2014 at 2:46:45 pm'!
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'hh 5/22/2014 14:48' prior: 33667646!
parallelForkTest
| p |
FileStream stdout nextPutAll: 'starting stm process.'.
p := [ 1 + 1. ] parallelFork.
p wait! !
----End fileIn of D:\code\python\spy-vm\lang-smalltalk\images\Integer-parallelForkTest.st----!
----SNAPSHOT----{26 June 2014 . 2:49:57 pm} Squeak4.5-12568.image priorSource: 113431!
----QUIT----{26 June 2014 . 2:50 pm} Squeak4.5-12568.image priorSource: 114022!
----STARTUP----{26 June 2014 . 2:52:02 pm} as D:\code\python\spy-vm\lang-smalltalk\images\Squeak4.5-12568.image!
'From Squeak4.4 of 28 April 2013 [latest update: #12627] on 26 June 2014 at 2:51:52 pm'!
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'pre 6/26/2014 14:43'!
osLockTest
| lock process1 process2 process2lock |
lock := OSLock new.
lock lock.
process2lock := OSLock new.
process2lock lock.
process1 := [ SPyVM print: 'First process start'.
lock lock.
process2lock release.
SPyVM print: 'First process after lock'.
lock release. ] parallelFork .
process2 := [ SPyVM print: 'Second process start'.
process2lock lock.
lock lock.
SPyVM print: 'Second process after lock'.
process2lock release.
lock release. ] parallelFork .
SPyVM print: 'Processes initialized.'.
lock release.
process1 wait.
process2 wait.! !
----End fileIn of a stream----!
----QUIT----{26 June 2014 . 2:53:18 pm} Squeak4.5-12568.image priorSource: 114110!
----STARTUP----{26 June 2014 . 3:02:03 pm} as D:\code\python\spy-vm\lang-smalltalk\images\Squeak4.5-12568.image!
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'pre 6/26/2014 15:02'!
osLockEasyTest
| lock |
lock := OSLock new.
lock lock.
lock release.
SPyVM print: 'Survived lock.'! !
----QUIT----{26 June 2014 . 3:02:52 pm} Squeak4.5-12568.image priorSource: 115096!
----STARTUP----{26 June 2014 . 3:03:40 pm} as D:\code\python\spy-vm\lang-smalltalk\images\Squeak4.5-12568.image!
!OSLock methodsFor: 'as yet unclassified' stamp: 'pre 6/26/2014 15:04' prior: 33667310!
lock
<primitive: 792>
SPyVM print: '* STM Process did not fork *' , Character cr.
self primitiveFailed.
self resume! !
!OSLock methodsFor: 'as yet unclassified' stamp: 'pre 6/26/2014 15:04' prior: 33667409!
release
<primitive: 793>
SPyVM print: '* STM Process did not fork *' , Character cr.
self primitiveFailed.
self resume! !
!OSLock methodsFor: 'as yet unclassified' stamp: 'pre 6/26/2014 15:04' prior: 33670408!
release
<primitive: 793>
SPyVM print: '* OS Lock could not be released *' , Character cr.
self primitiveFailed.
self resume! !
!OSLock methodsFor: 'as yet unclassified' stamp: 'pre 6/26/2014 15:04' prior: 33670196!
lock
<primitive: 792>
SPyVM print: '* OS Lock could not be locked *' , Character cr.
self primitiveFailed.
self resume! !
----QUIT----{26 June 2014 . 3:04:45 pm} Squeak4.5-12568.image priorSource: 115476!
----STARTUP----{26 June 2014 . 3:08:07 pm} as D:\code\python\spy-vm\lang-smalltalk\images\Squeak4.5-12568.image!
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'pre 6/26/2014 15:08' prior: 33669797!
osLockEasyTest
| lock |
lock := OSLock new.
lock lock.
SPyVM print: 'Survived lock.'! !
----QUIT----{26 June 2014 . 3:08:24 pm} Squeak4.5-12568.image priorSource: 116537!
----STARTUP----{26 June 2014 . 3:09:05 pm} as D:\code\python\spy-vm\lang-smalltalk\images\Squeak4.5-12568.image!
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'pre 6/26/2014 15:09' prior: 33671254!
osLockEasyTest
| lock |
lock := OSLock new.
lock lock.
lock release.
SPyVM print: 'Survived lock.'! !
----QUIT----{26 June 2014 . 3:09:17 pm} Squeak4.5-12568.image priorSource: 116916!
----STARTUP----{26 June 2014 . 3:57:38 pm} as D:\code\python\spy-vm\lang-smalltalk\images\Squeak4.5-12568.image!
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'pre 6/26/2014 15:57' prior: 33671633!
osLockEasyTest
| lock |
lock := OSLock new.
lock lock.
SPyVM print: 'Survived lock.'
lock release.
SPyVM print: 'Survived lock.'! !
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'pre 6/26/2014 15:58' prior: 33672027!
osLockEasyTest
| lock |
lock := OSLock new.
lock lock.
SPyVM print: 'Survived lock.'.
lock release.
SPyVM print: 'Survived lock.'.
^ self! !
----QUIT----{26 June 2014 . 3:58:58 pm} Squeak4.5-12568.image priorSource: 117310!
----STARTUP----{26 June 2014 . 3:59:21 pm} as D:\code\python\spy-vm\lang-smalltalk\images\Squeak4.5-12568.image!
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'pre 6/26/2014 15:59' prior: 33672253!
osLockEasyTest
| lock |
lock := OSLock new.
lock lock.
SPyVM print: 'Survived locking.'.
lock release.
SPyVM print: 'Survived releasing.'.
^ self! !
!Integer methodsFor: '*SPy-Benchmarks' stamp: 'pre 6/26/2014 15:59' prior: 33672690!
osLockEasyTest
| lock1 |
lock1 := OSLock new.
lock1 lock.
SPyVM print: 'Survived locking.'.
lock1 release.
SPyVM print: 'Survived releasing.'.
^ self! !
----QUIT----{26 June 2014 . 4:00 pm} Squeak4.5-12568.image priorSource: 117973!
----STARTUP----{26 June 2014 . 4:07:56 pm} as D:\code\python\spy-vm\lang-smalltalk\images\Squeak4.5-12568.image!
!OSLock methodsFor: 'as yet unclassified' stamp: 'pre 6/26/2014 16:09' prior: 33670843!
lock
self internalLock
! !
!OSLock methodsFor: 'as yet unclassified' stamp: 'pre 6/26/2014 16:09'!
internalLock
<primitive: 792>
SPyVM print: '* OS Lock could not be locked *' , Character cr.
self primitiveFailed.
self resume! !
!OSLock methodsFor: 'as yet unclassified' stamp: 'pre 6/26/2014 16:09'!
internalRelease
<primitive: 793>
SPyVM print: '* OS Lock could not be released *' , Character cr.
self primitiveFailed.
self resume! !
!OSLock methodsFor: 'as yet unclassified' stamp: 'pre 6/26/2014 16:09' prior: 33670623!
release
self internalRelease! !
----QUIT----{26 June 2014 . 4:09:34 pm} Squeak4.5-12568.image priorSource: 118668!
\ No newline at end of file
diff --git a/images/Squeak4.5-12568.image b/images/Squeak4.5-12568.image
index 0d24c0b0506552d59e3dd4db7be72f7e565a8d7c..6628e9cf95b4860c2c865166b07278b10aec9b80
GIT binary patch
[cut]
diff --git a/spyvm/primitives.py b/spyvm/primitives.py
--- a/spyvm/primitives.py
+++ b/spyvm/primitives.py
@@ -1335,6 +1335,10 @@
STM_ATOMIC_ENTER = 1302 # 790
STM_ATOMIC_LEAVE = 1303 # 791
+# OS Lock Primitives
+OS_LOCK_LOCK = 1304 # 792
+OS_LOCK_RELEASE = 1305 # 793
+
@expose_primitive(BLOCK_COPY, unwrap_spec=[object, int])
def func(interp, s_frame, w_context, argcnt):
@@ -1542,6 +1546,26 @@
rstm.decrement_atomic()
+ at expose_primitive(OS_LOCK_LOCK, unwrap_spec=[object], no_result=True)
+def func(interp, s_frame, w_rcvr):
+ from rpython.rlib import rthread
+
+ if not isinstance(w_rcvr, model.W_PointersObject):
+ 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()
+
+ at expose_primitive(OS_LOCK_RELEASE, unwrap_spec=[object], no_result=True)
+def func(interp, s_frame, w_rcvr):
+ from rpython.rlib import rthread
+
+ if not isinstance(w_rcvr, model.W_PointersObject):
+ 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()
+
# ___________________________________________________________________________
# BlockClosure Primitives
diff --git a/spyvm/shadow.py b/spyvm/shadow.py
--- a/spyvm/shadow.py
+++ b/spyvm/shadow.py
@@ -1142,4 +1142,17 @@
return lock_result
def signal(self):
- self.lock.release()
\ No newline at end of file
+ self.lock.release()
+
+class OSLockShadow(AbstractShadow):
+
+ def __init__(self, space, w_self):
+ AbstractShadow.__init__(self, space, w_self)
+ self.intern_lock = rthread.allocate_lock()
+
+ def os_lock(self):
+ self.intern_lock.acquire(True)
+
+ def os_release(self):
+ self.intern_lock.release()
+
More information about the pypy-commit
mailing list