[PATCH] os: Fix timer race conditions

Nikhil Mahale nmahale at nvidia.com
Tue Nov 25 22:50:03 PST 2014


On Monday, November 24, 2014 10:52:37 PM Julien Cristau wrote:
> On Fri, Nov 14, 2014 at 23:52:55 +0530, Nikhil Mahale wrote:
> > From 40f5100cb73aad8f90ba2c926dd08c4e15789de0 Mon Sep 17 00:00:00 2001
> > From: Nikhil Mahale <nmahale at nvidia.com>
> > Date: Tue, 11 Nov 2014 17:44:28 +0530
> > Subject: [PATCH] os: Fix timer race conditions
> > 
> > Fixing following kind of race-conditions -
> > 
> >     WaitForSomething()
> >     
> >     ---->  // timers -> timer-1 -> timer-2 -> null
> >     
> >            while (timers && (int) (timers->expires - now) <= 0)
> >            
> >                // prototype - DoTimer(OsTimerPtr timer, CARD32 now,
> >                OsTimerPtr *prev)
> >                DoTimer(timers, now, &timers)
> >                
> >                
> >                ----> OsBlockSignals();  .... OS Signal comes just before
> >                blocking it,
> >                
> >                                         .... timer-1 handler gets called.
> >                                         
> >                                              // timer-1 gets served and
> >                                              scheduled again;
> >                                              // timers -> timer-2 ->
> >                                              timer-1 -> null
> >                                         
> >                                         ....
> >                      
> >                      *prev = timer->next;
> >                      
> >                       timer->next = NULL;   // timers -> null
> >                       // timers list gets corrupted here and timer-2 gets
> >                       removed from list.
> > 
> > https://bugs.freedesktop.org/show_bug.cgi?id=86288
> > Signed-off-by: Nikhil Mahale <nmahale at nvidia.com>
> > ---
> > 
> >  os/WaitFor.c | 31 +++++++++++++++++++++----------
> >  1 file changed, 21 insertions(+), 10 deletions(-)
> 
> As far as I can tell after this change DoTimer is always called with
> signals disabled, so it doesn't need to disable them itself?
> 

ok, here is updated patch.

> Cheers,
> Julien

-----------------------------------------------------------------------------------
This email message is for the sole use of the intended recipient(s) and may contain
confidential information.  Any unauthorized review, use, disclosure or distribution
is prohibited.  If you are not the intended recipient, please contact the sender by
reply email and destroy all copies of the original message.
-----------------------------------------------------------------------------------
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-os-Fix-timer-race-conditions.patch
Type: text/x-patch
Size: 3858 bytes
Desc: not available
URL: <http://lists.x.org/archives/xorg-devel/attachments/20141126/26988def/attachment.bin>


More information about the xorg-devel mailing list