Re: pidfile_open incorrectly returns EAGAIN when pidfile is locked

From: John Baldwin <jhb_at_freebsd.org>
Date: Thu, 14 Mar 2013 09:42:40 -0400
On Thursday, March 14, 2013 4:44:20 am Pawel Jakub Dawidek wrote:
> On Thu, Mar 14, 2013 at 08:28:25AM +0100, Dirk Engling wrote:
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA1
> > 
> > On 13.03.13 23:08, Pawel Jakub Dawidek wrote:
> > 
> > > I think I considered something similar at first, but the change I 
> > > proposed was optimal, IMHO at the cost of producing pretty large
> > > diff, because of indentation change. But to be sure, can you send a
> > > patch of your proposed change?
> > 
> > http://erdgeist.org/arts/software/Code/pidfile.c.diff
> 
> Right. Your patch assumes EWOULDBLOCK is equal to EAGAIN, which is true
> on FreeBSD, but is not portable. Also in case pidptr is NULL you compare
> errno three times instead of just one (not a big deal of course, just
> something that could be done a bit more optimal:)).

Geeze, why not just add an else.  That's the really short diff:

Index: pidfile.c
===================================================================
--- pidfile.c	(revision 248162)
+++ pidfile.c	(working copy)
_at__at_ -140,7 +140,8 _at__at_ pidfile_open(const char *path, mode_t mode, pid_t
 				*pidptr = -1;
 			if (errno == 0 || errno == EAGAIN)
 				errno = EEXIST;
-		}
+		} else if (errno == EWOULDBLOCK)
+			errno = EEXIST;
 		free(pfh);
 		return (NULL);
 	}

-- 
John Baldwin
Received on Thu Mar 14 2013 - 13:57:28 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:35 UTC