[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: flock, EAGAIN, and EWOULDBLOCK



On Monday 23 February 2009, Matthew Wilcox wrote:
> On Sun, Feb 22, 2009 at 09:43:36PM -0500, Carlos O'Donell wrote:
> > flock is not POSIX, it's an interface invented by 4.2BSD, and was
> > previously emulated by glibc. The glibc wrapper implemented flock
> > with fcntl and made sure to return EWOULDBLOCK.

As an additional data point, openbsd's flock man page also says it 
should return EWOULDBLOCK.

> We actually can do better than this ...
>
> #ifdef __KERNEL__
> #define EWOULDBLOCK	EAGAIN
> #else
> #define EWOULDBLOCK	/* whatever the fuck HPUX uses */
> #endif
>
> Now our kernel never returns -EWOULDBLOCK, only -EAGAIN.  Correct
> applications must check for both.  Incorrect applications tend to
> only check for AGAIN, not WOULDBLOCK.  Problem solved.

This seems to be the current behaviour WRT flock(). But this is 
broken. An application (like apr in this case) that checks for the 
documented and well established return code is _not_ incorrect.

For apr in Debian, I will simply add the check for EAGAIN. But this is 
cannot be the general solution.


Cheers,
Stefan


Reply to: