Hi,
The attached change set adds Continuation >> #signal: that allows a Continuation to resume with a signalled Exception. The change set also includes two new test cases. This functionality will allow, inter alia, an external watchdog process to select old continuations and resume them with a TimedOut exception. This is analagous to the existing #valueWithin:onTimeout: Try this example (included in the change set preamble): "create a place to store a continuation..." Smalltalk at: #CC put: nil. Transcript open; clear. "fork a process that suspends on its continuation..." [ [ Transcript show: 'about to suspend...'; cr. Continuation currentDo: [ :cc | CC := cc. Processor activeProcess terminate ]. Transcript show: 'resumed in time'; cr ] on: TimedOut do: [ :e | Transcript show: e; cr ] ] fork. "resume normally..." [ CC value ] fork. "resume with exception..." [ CC signal: TimedOut ] fork. "remove the continuation..." CC := nil. I think this could really help cleanup how Seaside expires sessions. Thoughts, inclusion ? Thanks Brent continuationExceptions-brp.1.cs.gz (1K) Download Attachment |
Note that all Enhancements should be entered into the Mantis database
now http://bugs.squeak.org/ I understand that you were probably thinking it should be discussed first. But frankly it would be really helpful if the discussion took place in the Mantis report itself. It is extremely annoying to find a report on Mantis with a minimal description and absolutely no discussion. (Annoying to those with thoughts of harvesting that is.) If discussion took place on squeak-dev that's wonderful but nearly impossible to track back from the Mantis report unless some kind soul includes a link in a note, even then it is rather awkward. Ken On Tue, 2008-08-12 at 23:12 +0200, Brent Pinkney wrote: > Hi, > > The attached change set adds Continuation >> #signal: that allows a Continuation to resume with a signalled Exception. > The change set also includes two new test cases. > > This functionality will allow, inter alia, an external watchdog process to select old continuations and resume them > with a TimedOut exception. This is analagous to the existing #valueWithin:onTimeout: > > Try this example (included in the change set preamble): > > "create a place to store a continuation..." > Smalltalk at: #CC put: nil. > Transcript open; clear. > > "fork a process that suspends on its continuation..." > [ [ Transcript show: 'about to suspend...'; cr. > Continuation currentDo: [ :cc | CC := cc. Processor activeProcess terminate ]. > Transcript show: 'resumed in time'; cr ] > on: TimedOut > do: [ :e | Transcript show: e; cr ] ] fork. > > "resume normally..." > [ CC value ] fork. > > "resume with exception..." > [ CC signal: TimedOut ] fork. > > "remove the continuation..." > CC := nil. > > I think this could really help cleanup how Seaside expires sessions. > Thoughts, inclusion ? > > Thanks > > Brent signature.asc (196 bytes) Download Attachment |
Free forum by Nabble | Edit this page |