Some Delay tweaks
Elod Kironsky
kironsky at grisoft.cz
Fri Aug 31 10:52:06 UTC 2007
Many thanks Andreas! Recently, I was experimenting with some models in
SmallDEVS, where I started a process with a body:
self socket ifNil: [
(Delay forSeconds: 1) wait.
].
self socket dataAvailable ifTrue: [
"do some stuff"
] ifFalse: [
(Delay forMilliseconds: 20) wait
].
Sometimes this process remained in Process Browser, even though I called
suspend;terminate. Now I know why. Thanks again,
Elod
> Hi -
>
> Just FYI, I've updated http://bugs.squeak.org/view.php?id=6576 with
> another change set containing a few relevant tweaks to Delay. The most
> important one is probably the one which ensures that Delays get
> unscheduled if the process they wait for is terminated. The problem is
> that delays which are scheduled are kept in the SuspendedDelays even
> after "their" process terminates. So that, for example a "(Delay
> forSeconds: 9999999) wait" (with an Alt-Period following it) would
> leave that delay being scheduled for expiry 100 days from now although
> its process is long gone.
>
> The tweaks also ensure that delays which actually expire in
> Semaphore>>waitTimeoutMSecs: don't get unscheduled twice (since
> unscheduling is a linear search over all scheduled delays it should be
> avoided).
>
> Lastly, there is a bit of bullet-proofing to Delay>>handleTimerEvent
> since each poll of the msecs clock has the potential to overflow and
> needs to be guarded explicitly. The tweaks make sure there is only one
> such poll and consequently only one place to check. Except from
> another obscure situation which the change set addresses as well.
>
> In any case, it's a nice roundup for the Delay changes. If you're
> using the first one, you should probably use this one as well.
>
> Cheers,
> - Andreas
>
>
More information about the Squeak-dev
mailing list
|