[Pkg] The Trunk: Kernel-ar.718.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue Dec 4 19:41:15 UTC 2012
Andreas Raab uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-ar.718.mcz
==================== Summary ====================
Name: Kernel-ar.718
Author: ar
Time: 4 December 2012, 8:40:21.883 pm
UUID: 34faba8b-abd8-a749-b293-9e843f1b1eeb
Ancestors: Kernel-cmm.717
Fix broken behavior in nested valueWithin:onTimeout: usage.
=============== Diff against Kernel-cmm.717 ===============
Item was changed:
----- Method: BlockClosure>>valueWithin:onTimeout: (in category 'evaluating') -----
valueWithin: aDuration onTimeout: timeoutBlock
"Evaluate the receiver.
If the evaluation does not complete in less than aDuration evaluate the timeoutBlock instead"
+ | theProcess delay watchdog tag |
- | theProcess delay watchdog |
aDuration <= Duration zero ifTrue: [^ timeoutBlock value ].
"the block will be executed in the current process"
theProcess := Processor activeProcess.
delay := aDuration asDelay.
+ tag := self.
"make a watchdog process"
watchdog := [
delay wait. "wait for timeout or completion"
+ theProcess ifNotNil:[ theProcess signalException: (TimedOut new tag: tag)]
- theProcess ifNotNil:[ theProcess signalException: TimedOut ]
] newProcess.
"Watchdog needs to run at high priority to do its job (but not at timing priority)"
watchdog priority: Processor timingPriority-1.
"catch the timeout signal"
^ [ watchdog resume. "start up the watchdog"
self ensure:[ "evaluate the receiver"
theProcess := nil. "it has completed, so ..."
delay delaySemaphore signal. "arrange for the watchdog to exit"
+ ]] on: TimedOut do: [ :e |
+ e tag == tag
+ ifTrue:[ timeoutBlock value ]
+ ifFalse:[ e pass]].!
- ]] on: TimedOut do: [ :e | timeoutBlock value ].
- !
Item was changed:
----- Method: BlockContext>>valueWithin:onTimeout: (in category 'evaluating') -----
valueWithin: aDuration onTimeout: timeoutBlock
"Evaluate the receiver.
If the evaluation does not complete in less than aDuration evaluate the timeoutBlock instead"
+ | theProcess delay watchdog tag |
- | theProcess delay watchdog |
aDuration <= Duration zero ifTrue: [^ timeoutBlock value ].
"the block will be executed in the current process"
theProcess := Processor activeProcess.
delay := aDuration asDelay.
+ tag := self.
"make a watchdog process"
watchdog := [
delay wait. "wait for timeout or completion"
+ theProcess ifNotNil:[ theProcess signalException: (TimedOut new tag: tag)]
- theProcess ifNotNil:[ theProcess signalException: TimedOut ]
] newProcess.
"Watchdog needs to run at high priority to do its job (but not at timing priority)"
watchdog priority: Processor timingPriority-1.
"catch the timeout signal"
^ [ watchdog resume. "start up the watchdog"
self ensure:[ "evaluate the receiver"
theProcess := nil. "it has completed, so ..."
delay delaySemaphore signal. "arrange for the watchdog to exit"
+ ]] on: TimedOut do: [ :e |
+ e tag == tag
+ ifTrue:[ timeoutBlock value ]
+ ifFalse:[ e pass]].!
- ]] on: TimedOut do: [ :e | timeoutBlock value ].
- !
More information about the Packages
mailing list