Date: Thu, 17 Jul 2008 13:42:31 -0400 From: "Michael B Allen" <ioplex@gmail.com> To: "John Baldwin" <jhb@freebsd.org> Cc: freebsd-hackers@freebsd.org Subject: Re: Pls sanity check my semtimedop(2) implementation Message-ID: <78c6bd860807171042o54627c78nfcc0c19717b75f1e@mail.gmail.com> In-Reply-To: <200807171005.53148.jhb@freebsd.org> References: <78c6bd860807121611w4f6ab44brbebfffea9929682a@mail.gmail.com> <200807171005.53148.jhb@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Jul 17, 2008 at 10:05 AM, John Baldwin <jhb@freebsd.org> wrote: > On Saturday 12 July 2008 07:11:26 pm Michael B Allen wrote: >> Hi, >> >> Below is a semtimedop(2) implementation that I'm using for FreeBSD. I >> was hoping someone could look it over and tell me if they think the >> implementation is sound. >> >> The code seems to work ok but when stressing the FreeBSD build of my app >> I have managed to provoke errors related to concurrency (usually when a >> SIGALRM goes off). The Linux build works flawlessesly so I'm wondering >> about this one critical function that is different. >> >> Do you think it would make any difference if I used >> ITIMER_VIRTUAL / SIGVTALRM instead of ITIMER_REAL / SIGALRM? >> >> Or perhaps I should be using a different implementation entirely? > > What specific races are you seeing? The timer is firing too early, too late? It's very difficult to tell. I can only trigger the issue very occasionally running my torture test such that any diagnostic logging changes the results. And at this point I'm not sure my semtimedop implementation is responsible. I have not seen the issue since fixing the race pointed out by Mikko (although I have not tried very hard to provoke it). For now, I'm satisfied since I do not think the issue will be triggered in the wild. I hate to use signals for anything but as much as I try, there's just no other way to implement semtimedop within a single largely self-contained function. In the future I will likely use another process in the application that uses select(2) as an "event service" to post on semaphores after a certain time period. Unfortunately, right now, that service ultimately calls semtimedop so I'll save it for a rainy day. Although if you implemented semtimedop(2) into the FreeBSD API that would work too :-) Thanks, Mike -- Michael B Allen PHP Active Directory SPNEGO SSO http://www.ioplex.com/
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?78c6bd860807171042o54627c78nfcc0c19717b75f1e>