On Wed, Aug 18, 2010 at 7:00 PM, Alex Shepherd <[email protected]>wrote:

> Hmmm... does this relate to the issues that I was seeing where owserver
> would crash with the Assertion:
>
> "...tpp.c:66: __pthread_tpp_change_priority: Assertion..."
>
> If it is then I'll rebuild from the latest source and see if it makes a
> difference. Currently I'm running an older version that doesn't have the
> Assertion issue.
>
> Alex
>
>
> ________________________________
>
>        From: Paul Alfille [mailto:[email protected]]
>        Sent: Thursday, 19 August 2010 7:35 a.m.
>        To: owfs-developers
>        Subject: [Owfs-developers] owserver mutext bug solved.
>
>
>        Leon did some careful sleuthing and found an architecture-dependent
> bug in the the locking model for owserver. The problem is mostlikely some
> problem with the mutex implementation on that platform, but the problem
> seems solved.
>
>        In his words, the problem:
>        -------
>        Submitted By: Leon (nleonard671)
>        Assigned to: Nobody/Anonymous (nobody)
>        Summary: owserver crashes on client disconnection on Mips CPU
>
>        Initial Comment:
>        I'm using OWFS with an OpenWrt OS on a MIPS cpu (exact model: MIPS
> 24Kc V7.4) and I have a 100% reproductible crash problem with owserver.
>        Step to reproduce:
>         1. Launch owserver, no matter if you use fake device or real device
> (DS9490 in my case)
>         2. Launch "owget /"
>        => Segmentation fault in the server
>        -----------
>
>
>        And the solution:
>        --------------
>        Ok, I've finally managed to find out the bug. It's a race condition
> between
>        the 'ping loop' (owserver/loop.c) and the 'data handler'
>        (owserver/data.c).
>
>        Possible crash explanation:
>         1. [data.c:DataHandler()] Data thread lock the TOCLIENT mutex,
> sets the
>        hd->toclient to toclient_complete then write some dummy data to the
> pipe,
>        to wakeup the PingLoop thread (line 215)
>         2. [loop.c:Ping_or_Send()] Ping thread select is 'awaked' by the
> pipe
>        data (line 92) and returns without locking the TOCLIENT mutex (line
> 96)
>         3. [loop.c:PingLoop()] Exist from the loop and execute
> LoopCleanup(à,
>        which destroys the TOCLIENT mutex
>         4. [data.c:DataHandler()] Data thread unlocks the TOCLIENT mutex
> (line
>        218), and crashes
>        I didn't notice early, but in my output log files, the statement
> "Finished
>        with client request" (data.c:222) was never written, confirming that
> the
>        data thread crashes before.
>
>        I tried to reproduce it unsuccessfully on my development hardware
> (x86) -
>        maybe the uClibc pthread implementation used by OpenWrt has a
> different
>        behavior than the glibc's one.
>
>        A working fix: instead of returning of c:Ping_or_Send() directly
> after the
>        select(), a lock/unlock step is executed, allowing the data thread
> to
>        finish properly before destroying the shared resources.
>
>        --- owfs-2.8p0-ORIG/module/
>        owserver/src/c/loop.c        2010-05-08
>        20:47:10.000000000 +0200
>        +++ owfs-2.8p0/module/owserver/src/c/loop.c     2010-08-18
>        02:49:27.000000000 +0200
>        @@ -93,7 +93,7 @@
>
>               // read pipe shows final data was sent
>               if ( select_value == 1 ) {
>        -               return toclient_complete ;
>        +               next_toclient = toclient_complete ;
>               }
>
>               TOCLIENTLOCK(hd);
>
>        ---------------------
>
>
>        Thanks!
>        Paul Alfille
>
>
>
>
>
>
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by
>
> Make an app they can't live without
> Enter the BlackBerry Developer Challenge
> http://p.sf.net/sfu/RIM-dev2dev
> _______________________________________________
> Owfs-developers mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/owfs-developers
>
------------------------------------------------------------------------------
This SF.net email is sponsored by 

Make an app they can't live without
Enter the BlackBerry Developer Challenge
http://p.sf.net/sfu/RIM-dev2dev 
_______________________________________________
Owfs-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/owfs-developers

Reply via email to