--- a/SemaphoreMonitor.st Mon Jan 16 19:58:08 2017 +0000
+++ b/SemaphoreMonitor.st Tue Jan 17 11:18:31 2017 +0000
@@ -71,7 +71,7 @@
!SemaphoreMonitor methodsFor:'drawing'!
titleLine
- ^ ' Id Name Count Owner Waiting Process(es) '.
+ ^ 'Id Name Count Owner Waiting Process(es)'.
"
SemaphoreMonitor open
@@ -86,21 +86,18 @@
|newList|
shown ifTrue:[
- newList := Semaphore allSubInstances.
+ newList := Semaphore allSubInstances.
- "sort by hashKey - will not always generate unique numbers,
- but most of the time, this works ... for now"
-
- newList sort:[:s1 :s2 | s1 identityHash < s2 identityHash].
+ "sort by hashKey - will not always generate unique numbers,
+ but most of the time, this works ... for now"
- newList ~= semaphores ifTrue:[
- self updateStatus:newList
- ].
+ newList sort:[:s1 :s2 | s1 identityHash < s2 identityHash].
+
+ newList ~= semaphores ifTrue:[
+ self updateStatus:newList
+ ].
].
- updateBlock notNil ifTrue:[
- Processor removeTimedBlock:listUpdateBlock.
- Processor addTimedBlock:listUpdateBlock afterSeconds:listUpdateDelay
- ].
+ self installDelayedUpdate.
"Modified: / 3.7.1996 / 13:37:29 / stefan"
"Created: / 23.1.1997 / 02:44:48 / cg"
@@ -165,10 +162,12 @@
id := aSemaphore identityHash bitShift:-12.
owner := aSemaphore lastOwnerId.
owner isNil ifTrue:[
- owner := ' '
+ owner := ''
] ifFalse:[
- owner := owner printStringLeftPaddedTo:5
+ owner := owner printString
].
+ owner := owner leftPaddedTo:6.
+
line := (id printStringPaddedTo:6)
, ' '
, ((nm contractTo:25) paddedTo:25)
@@ -223,10 +222,7 @@
].
listView flush
].
- updateBlock notNil ifTrue:[
- Processor removeTimedBlock:updateBlock.
- Processor addTimedBlock:updateBlock afterSeconds:updateDelay
- ]
+ self installDelayedUpdate.
"Modified: / 3.7.1996 / 13:56:01 / stefan"
"Created: / 14.12.1999 / 20:52:29 / cg"
@@ -235,13 +231,25 @@
!SemaphoreMonitor methodsFor:'menu'!
-debugWaiters
- "open a debugger on the selected semaphores waiting processes"
+debugLastOwningProcess
+ "open a debugger on the selected semaphores' (last) owning processes"
self selectedSemaphoresDo:[:aSema |
- aSema waitingProcesses do:[:aProcess |
- DebugView openOn:aProcess
- ]
+ |p|
+
+ (p := aSema lastOwner) notNil ifTrue:[
+ DebugView openOn:p
+ ]
+ ]
+!
+
+debugWaiters
+ "open a debugger on the selected semaphores' waiting processes"
+
+ self selectedSemaphoresDo:[:aSema |
+ aSema waitingProcesses do:[:aProcess |
+ DebugView openOn:aProcess
+ ]
]
"Modified: / 23.1.1997 / 03:12:06 / cg"
@@ -249,7 +257,7 @@
!
inspectSemaphore
- "open an inspector on the selected semaphores"
+ "open an inspector on the selected semaphore(s)"
self selectedSemaphoresDo:[:aSema | aSema inspect]
@@ -258,12 +266,12 @@
!
inspectWaiters
- "open an inspector on the selected semaphores waiting processes"
+ "open an inspector on the selected semaphores' waiting processes"
self selectedSemaphoresDo:[:aSema |
- aSema waitingProcesses do:[:aProcess |
- aProcess inspect
- ]
+ aSema waitingProcesses do:[:aProcess |
+ aProcess inspect
+ ]
]
"Modified: / 23.1.1997 / 03:12:06 / cg"
@@ -271,27 +279,12 @@
!
selectedSemaphoresDo:aBlock
- "evaluate aBlock on all selected semaphores"
-
- |p nr sel|
-
- sel := listView selection.
- sel isNil ifTrue:[^ self].
+ "evaluate aBlock on all selected semaphore(s)"
- (sel isKindOf:Collection) ifTrue:[
- sel do:[:n |
- nr := n - self numberOfHeadlines.
- nr notNil ifTrue:[
- nr > 0 ifTrue:[
- p := semaphores at:nr.
- (p notNil and:[p ~~ 0]) ifTrue:[
- aBlock value:p
- ]
- ]
- ]
- ]
- ] ifFalse:[
- nr := sel - self numberOfHeadlines.
+ self selectionIndicesDo:[:n |
+ |nr p|
+
+ nr := n - self numberOfHeadlines.
nr notNil ifTrue:[
nr > 0 ifTrue:[
p := semaphores at:nr.
@@ -301,8 +294,6 @@
]
]
].
-
- "Created: 23.1.1997 / 03:11:24 / cg"
!
signalSemaphore
@@ -321,34 +312,39 @@
|labels selectors m|
labels := resources array:#(
- 'Inspect'
- 'Inspect Waiters'
- 'Debug Waiters'
- '-'
- 'Signal'
- ).
+ 'Inspect'
+ 'Inspect Waiters'
+ 'Debug Waiters'
+ 'Debug Last Owning Process'
+ '-'
+ 'Signal'
+ ).
selectors := #(
- inspectSemaphore
- inspectWaiters
- debugWaiters
- nil
- signalSemaphore
- ).
+ inspectSemaphore
+ inspectWaiters
+ debugWaiters
+ debugLastOwningProcess
+ nil
+ signalSemaphore
+ ).
updateProcess isNil ifTrue:[
- labels := (resources array:#('Update' '-')) , labels.
- selectors := #(updateView nil) , selectors
+ labels := (resources array:#('Update' '-')) , labels.
+ selectors := #(updateView nil) , selectors
].
m := PopUpMenu labels:labels
- selectors:selectors.
+ selectors:selectors.
listView hasSelection ifFalse:[
- m disableAll:#(
- inspectSemaphore
- signalSemaphore
- )
+ m disableAll:#(
+ inspectSemaphore
+ inspectWaiters
+ debugWaiters
+ debugLastOwningProcess
+ signalSemaphore
+ )
].
^ m