On Mon, Feb 1, 2010 at 8:48 PM, Koen Deforche <k...@emweb.be> wrote:

> Hey Maurice,
>
> 2010/2/1 Maurice Gittens <mainmanmauri...@gmail.com>:
> > diff --git a/src/Wt/WResource.C b/src/Wt/WResource.C
> >>
> >> index c960b25..df8876e 100644
> >> --- a/src/Wt/WResource.C
> >> +++ b/src/Wt/WResource.C
> >> @@ -86,7 +86,7 @@ void WResource::handle(WebRequest *webRequest,
> >> WebResponse *webResponse,
> >>   // lock
> >>   if (!continuation) {
> >>     WebSession::Handler *h = WebSession::Handler::instance();
> >> -    if (h)
> >> +    if (h && h->lock().owns_lock())
> >>       h->lock().unlock();
> >
> > This patch appears on my "something might be wrong" radar.
> >
> > Is this not a classical race where the test for lock ownership
> > succeeds but the when the unlock is called the test condition is no
> longer
> > true because your thread got preempted?
>
> Not really, if the thread has the lock it has exclusive access ? I
> cannot see why this could be a race condition ?
> (WebSession::Handler::instance() returns an object from thread-local
> memory which is entirely owned by the current thread).
>
> Usually, a thread will have the session lock on entry of a WResource
> handleRequest(), but there are a few exceptions. Resources are handled
> outside of the session lock and are reentrant -- but still protected
> against being destructed while busy, and therefore we want to release
> the session lock if we have it.
>
> The wtwithqt support library works by doing all event handling for a
> particular session inside a dedicated Qt thread, since this is the
> only way to work with Qt's threading model (which binds ownership of
> QObjects to a particular thread and requires that only that thread
> uses signal/slots on that object). In that case the Qt thread will not
> have the session lock, but the Wt thread that is handling the session
> will have the lock. Functionally, this means that when using Wt in
> conjunction with Qt, WResource handling will not be reentrant.
>

As I said, I haven't looked at the locking protocol or the semantics
of your locking primitvies, so I might be wrong.

Thanks for your comments.

Kind regards,
Maurice


>
> Regards,
> koen
>
>
> ------------------------------------------------------------------------------
> The Planet: dedicated and managed hosting, cloud storage, colocation
> Stay online with enterprise data centers and the best network in the
> business
> Choose flexible plans and management services without long-term contracts
> Personal 24x7 support from experience hosting pros just a phone call away.
> http://p.sf.net/sfu/theplanet-com
> _______________________________________________
> witty-interest mailing list
> witty-interest@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/witty-interest
>
------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
_______________________________________________
witty-interest mailing list
witty-interest@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/witty-interest

Reply via email to