Java monitors are now even more synchronized jk_new_structure
authorhlopkmar
Tue, 29 Nov 2011 10:22:50 +0000
branchjk_new_structure
changeset 1172 7795b5618017
parent 1171 8d0eecfba2d5
child 1173 5eefc8f414bd
Java monitors are now even more synchronized
src/JavaMonitor.st
--- 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!