--- a/src/JavaMonitor.st Mon Nov 28 18:32:05 2011 +0000
+++ b/src/JavaMonitor.st Tue Nov 29 10:22:50 2011 +0000
@@ -21,10 +21,9 @@
"{ Package: 'stx:libjava' }"
Object subclass:#JavaMonitor
- instanceVariableNames:'owningProcess processesEntered monitorSema processesEnteredAccess
- owningProcessAccess count countAccess waitingSema
- processesWaitingAccess processesWaiting'
- classVariableNames:''
+ instanceVariableNames:'owningProcess processesEntered monitorSema count waitingSema
+ processesWaiting'
+ classVariableNames:'instVarAccess'
poolDictionaries:''
category:'Languages-Java-Support'
!
@@ -55,6 +54,14 @@
"
! !
+!JavaMonitor class methodsFor:'initialization'!
+
+initialize
+instVarAccess := RecursionLock forMutualExclusion.
+
+ "Created: / 29-11-2011 / 11:23:56 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+! !
+
!JavaMonitor class methodsFor:'instance creation'!
new
@@ -84,14 +91,14 @@
!JavaMonitor methodsFor:'atomic'!
-addProcess: aProcess
- processesEnteredAccess critical: [processesEntered add: aProcess].
+addProcess: aProcess
+ instVarAccess critical: [ processesEntered add: aProcess ].
"Created: / 20-11-2011 / 20:30:07 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
clearOwningProcess
- owningProcessAccess critical: [ owningProcess := nil ].
+ instVarAccess critical: [ owningProcess := nil ].
"Created: / 20-11-2011 / 20:34:27 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
@@ -100,39 +107,43 @@
"owning process released monitor, lets lower our counter so we know how many times
do we have to release it"
- countAccess critical: [ count := count - 1 ].
+ instVarAccess critical: [ count := count - 1 ].
"Created: / 22-11-2011 / 10:49:33 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
increment
"owning process entered monitor again (recursion ...), lets raise our counter so we know how many times
- do we have to release it"
- countAccess critical: [ count := count + 1 ].
+ do we have to release it"
+
+ instVarAccess critical: [ count := count + 1 ].
"Created: / 22-11-2011 / 10:49:07 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
-owningProcess: aProcess
-owningProcessAccess critical: [owningProcess := aProcess].
+owningProcess: aProcess
+ instVarAccess critical: [ owningProcess := aProcess ].
"Created: / 20-11-2011 / 20:32:26 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
processesWaitingAdd: aProcess
- processesWaitingAccess
- critical: [ self assert: (processesWaiting includesKey: aProcess) not.processesWaiting at: aProcess put: count ].
+ instVarAccess
+ critical: [
+ self assert: (processesWaiting includesKey: aProcess) not.
+ processesWaiting at: aProcess put: count
+ ].
"Created: / 22-11-2011 / 11:57:50 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
processesWaitingRestore: aProcess
- processesWaitingAccess
- critical: [
- self assert: (processesWaiting includesKey: aProcess).
- self reinitCounter: (processesWaiting at: aProcess).
- processesWaiting removeKey: aProcess
- ].
+ instVarAccess
+ critical: [
+ self assert: (processesWaiting includesKey: aProcess).
+ self reinitCounter: (processesWaiting at: aProcess).
+ processesWaiting removeKey: aProcess
+ ].
"Created: / 22-11-2011 / 12:59:14 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
@@ -140,19 +151,19 @@
reinitCounter
"owning process is different from previous, lets start counting from beginning"
- countAccess critical: [ count := 1 ].
+ instVarAccess critical: [ count := 1 ].
"Created: / 22-11-2011 / 10:51:09 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
reinitCounter: newCount
- countAccess critical: [ count := newCount ].
+ instVarAccess critical: [ count := newCount ].
"Created: / 22-11-2011 / 13:00:51 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
removeProcess: aProcess
- processesEnteredAccess
+ instVarAccess
critical: [
self assert: processesEntered last == aProcess.
processesEntered remove: aProcess
@@ -165,13 +176,13 @@
initialize
owningProcess := nil.
- owningProcessAccess := Semaphore forMutualExclusion.
+
processesEntered := OrderedCollection new.
- processesEnteredAccess := Semaphore forMutualExclusion.
+
monitorSema := Semaphore new: 1.
- countAccess := Semaphore forMutualExclusion.
+
processesWaiting := Dictionary new.
- processesWaitingAccess := Semaphore forMutualExclusion.
+
waitingSema := Semaphore new: 0.
"Created: / 20-11-2011 / 13:28:28 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
@@ -284,13 +295,13 @@
!JavaMonitor methodsFor:'queries'!
isAcquired
- ^ owningProcessAccess critical: [owningProcess notNil].
+ ^ instVarAccess critical: [ owningProcess notNil ].
"Created: / 20-11-2011 / 13:22:26 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
isOwnedBy: aProcess
- ^ owningProcessAccess critical: [ owningProcess == aProcess ].
+ ^ instVarAccess critical: [ owningProcess == aProcess ].
"Created: / 20-11-2011 / 13:23:14 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
@@ -300,3 +311,5 @@
version_SVN
^ '$Id$'
! !
+
+JavaMonitor initialize!