Process>>terminate woes
Andreas Raab
andreas.raab at gmx.de
Wed Dec 5 16:44:24 UTC 2007
Lukas Renggli wrote:
>> I've also noticed that Process>>isTerminated is not thread-safe...
>
> And #signalException:
Good one. Yes, this needs fixing.
My suggestion would be (with the other changes):
signalException: anException
| oldList |
self isActiveProcess ifTrue: [^anException signal].
"Suspend myself first to ensure that I won't run away in the
midst of the following modifications."
oldList := self suspend.
"Add a new method context to the stack that will signal the exception"
suspendedContext := MethodContext
sender: suspendedContext
receiver: self
method: (self class lookupSelector: #pvtSignal:list:)
arguments: (Array with: anException with: oldList).
"If we were on a list to run, then suspend and restart the receiver
(this lets the receiver run if it is currently blocked on a
semaphore). If
we are not on a list to be run (i.e. this process is suspended), then
when the
process is resumed, it will signal the exception"
oldList ifNotNil: [self resume].
Cheers,
- Andreas
More information about the Squeak-dev
mailing list
|