lkml.org 
[lkml]   [2009]   [Sep]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectHR timers prevent an itimer from generating EINTR?
Summary:

Mixing HR timers with itimers occasionally hides an EINTR from a
blocking syscall.


Description:

In my test program I have a High Resolution timer firing every one
second (with SA_RESTART) and I set an itimer (without SA_RESTART) to
fire after three seconds. I then execute a blocking system call (flock
in this case) and expect the three second itimer to interrupt the system
call with EINTR. However, I frequently notice that the itimer will fire
but it will not interrupt the blocking system call. There appears to be
a race between the HR timer firing and the itimer firing. If I offset
the HR timer frequency by a half second, the itimer always interrupts
the system call.

Kernel version:

These kernels both demonstrate the condition:

2.6.29.6-217.2.16.fc11.x86_64
and
2.6.30.5-43.fc11.x86_64


I do not see this condition on:

2.6.18-53.el5


Test program:

The following program illustrates this condition:

http://github.com/mheffner/scripts/commits/master/hrtimer_vs_itimer.c


Is this behavior expected?


Cheers,

Mike

--

Mike Heffner <mikeh@fesnel.com>



\
 
 \ /
  Last update: 2009-09-04 23:37    [from the cache]
©2003-2011 Jasper Spaans