r1787 - trunk/varnish-cache/lib/libvarnish

des at projects.linpro.no des at projects.linpro.no
Mon Jul 30 16:16:24 CEST 2007


Author: des
Date: 2007-07-30 16:16:23 +0200 (Mon, 30 Jul 2007)
New Revision: 1787

Modified:
   trunk/varnish-cache/lib/libvarnish/flopen.c
   trunk/varnish-cache/lib/libvarnish/vpf.c
Log:
Use fcntl(2)-style locks instead of non-portable flock(2)-style locks.

Based on Theo Schlossnagle's Solaris portability patch.


Modified: trunk/varnish-cache/lib/libvarnish/flopen.c
===================================================================
--- trunk/varnish-cache/lib/libvarnish/flopen.c	2007-07-30 13:54:48 UTC (rev 1786)
+++ trunk/varnish-cache/lib/libvarnish/flopen.c	2007-07-30 14:16:23 UTC (rev 1787)
@@ -44,6 +44,7 @@
 {
 	int fd, operation, serrno, trunc;
 	struct stat sb, fsb;
+	struct flock lock;
 	mode_t mode;
 
 #ifdef O_EXLOCK
@@ -59,9 +60,11 @@
 		va_end(ap);
 	}
 
-	operation = LOCK_EX;
-	if (flags & O_NONBLOCK)
-		operation |= LOCK_NB;
+	lock.l_type = (flags & O_WRONLY || flags & O_RDWR) ? F_WRLCK : F_RDLCK;
+	lock.l_start = 0;
+	lock.l_whence = SEEK_SET;
+	lock.l_len = 0;
+	operation = (flags & O_NONBLOCK) ? F_SETLK : F_SETLKW;
 
 	trunc = (flags & O_TRUNC);
 	flags &= ~O_TRUNC;
@@ -70,7 +73,7 @@
 		if ((fd = open(path, flags, mode)) == -1)
 			/* non-existent or no access */
 			return (-1);
-		if (flock(fd, operation) == -1) {
+		if (fcntl(fd, operation, &lock) == -1) {
 			/* unsupported or interrupted */
 			serrno = errno;
 			close(fd);

Modified: trunk/varnish-cache/lib/libvarnish/vpf.c
===================================================================
--- trunk/varnish-cache/lib/libvarnish/vpf.c	2007-07-30 13:54:48 UTC (rev 1786)
+++ trunk/varnish-cache/lib/libvarnish/vpf.c	2007-07-30 14:16:23 UTC (rev 1787)
@@ -32,12 +32,12 @@
 #include <sys/file.h>
 #include <sys/stat.h>
 
+#include <errno.h>
+#include <fcntl.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include <errno.h>
 
 #ifndef HAVE_STRLCPY
 #include "compat/strlcpy.h"
@@ -222,8 +222,14 @@
 static int
 _vpf_remove(struct pidfh *pfh, int freeit)
 {
+	struct flock lock;
 	int error;
 
+	lock.l_type = F_UNLCK;
+	lock.l_start = 0;
+	lock.l_whence = SEEK_SET;
+	lock.l_len = 0;
+
 	error = vpf_verify(pfh);
 	if (error != 0) {
 		errno = error;
@@ -232,7 +238,7 @@
 
 	if (unlink(pfh->pf_path) == -1)
 		error = errno;
-	if (flock(pfh->pf_fd, LOCK_UN) == -1) {
+	if (fcntl(pfh->pf_fd, F_SETLK, &lock) == -1) {
 		if (error == 0)
 			error = errno;
 	}




More information about the varnish-commit mailing list