[Seaside] Re: Are Collections threadsafe?
Philippe Marschall
philippe.marschall at gmail.com
Wed Feb 27 12:14:07 UTC 2008
2008/2/27, Adrian Lienhard <adi at netstyle.ch>:
>
> On Feb 27, 2008, at 08:22 , Andreas Raab wrote:
>
> > [...]
>
>
> > I'm not sure what point you're trying to make here but this is
> > actually a great example for what I mean. Lukas gave meaningful
> > information in this exchange and as a result we developed a couple
> > of theories and disproved them based on available evidence:
> >
> > http://lists.squeakfoundation.org/pipermail/squeak-dev/2007-December/123047.html
> > http://lists.squeakfoundation.org/pipermail/squeak-dev/2007-December/123499.html
> > http://lists.squeakfoundation.org/pipermail/squeak-dev/2007-December/123511.html
> >
> > I'm not claiming that you will *always* get to a result that
> > satisfies your needs but the above is a great example for the kind
> > of discourse that you can engage in when you provide some actual
> > data. Also, I think we both learned something in this exchange which
> > is where the real value lies - if I ever happen to run into a
> > similar situation the data that Lukas gave will definitely be
> > helpful in tracking this down. And don't worry, we'll get to it but
> > these are hard problems and I think we simply haven't got enough
> > data to determine the root cause of the problem. So if you have more
> > evidence, please share it and please don't be shy to post repeatedly
> > because that's what is needed to fix it.
>
>
> Here you are ;)
>
> Yesterday, I just happened to see again a Seaside application not
> responding anymore because a mutex was locked forever. However, no
> process was within the critical section that would eventually signal
> the semaphore. We had this problem before with SqueakSource and other
> applications.
>
> After some investigations (and first blaming concurrency issues with
> semaphores), I found the following cause. If there is an exception
> thrown within the critical section but this exception is not caught by
> the application but by the Seaside error handler, then the Seaside
> error handler would generate an error page and return this to the
> user. The error handler calls WASession>>returnResponse:, which
> evaluates the session's escape continuation. Surprisingly, however,
> the continuation does not execute any unwind blocks when terminating
> the current stack (see Continuation>>terminate:). Obviously this is
> the reason why the semaphore of the mutex never gets signaled.
Wow, I feel really stupid now. And all those unwind-protect vs.
call-cc wars in Scheme vs. CommonLisp come to my mind.
Philippe
> Continuation currentDo: [ :cc |
> [ [ 1/0 ] ensure: [ Transcript show: 'ensure' ] ]
> ifError: [ cc value ] ].
>
> Cheers,
>
> Adrian
>
> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>
More information about the seaside
mailing list