Use lockf rather than flock when taking the cgilock, for better portability.
authorJoey Hess <joey@kitenet.net>
Wed, 24 Aug 2011 21:35:53 +0000 (17:35 -0400)
committerJoey Hess <joey@kitenet.net>
Wed, 24 Aug 2011 21:35:53 +0000 (17:35 -0400)
This kind of change is scary, but this particular lock is very simply
used and so it seems ok to make it even just for better portability to
SunOS. (People still use that?)

IkiWiki/Wrapper.pm
debian/changelog
doc/bugs/ikiwiki_cgi_fails_to_build_on_Solaris_due_to_missing_LOCK__95__EX.mdwn

index d39a3ea402d153db93c34dd1e1aef751954a7e79..c39aa2ef7d678207ef86c938baef3f7af1933c30 100644 (file)
@@ -95,7 +95,7 @@ EOF
                # IKIWIKI_CGILOCK_FD so unlockwiki can close it.
                $pre_exec=<<"EOF";
        lockfd=open("$config{wikistatedir}/cgilock", O_CREAT | O_RDWR, 0666);
                # IKIWIKI_CGILOCK_FD so unlockwiki can close it.
                $pre_exec=<<"EOF";
        lockfd=open("$config{wikistatedir}/cgilock", O_CREAT | O_RDWR, 0666);
-       if (lockfd != -1 && flock(lockfd, LOCK_EX) == 0) {
+       if (lockfd != -1 && lockf(lockfd, F_LOCK, 0) == 0) {
                char *fd_s=malloc(8);
                sprintf(fd_s, "%i", lockfd);
                setenv("IKIWIKI_CGILOCK_FD", fd_s, 1);
                char *fd_s=malloc(8);
                sprintf(fd_s, "%i", lockfd);
                setenv("IKIWIKI_CGILOCK_FD", fd_s, 1);
index 5ac821b182dc4d23f065bcfaaf874b3f9e4b65c6..cd0b3a11414d50c908ccb8c7c8d68693cab7d4d5 100644 (file)
@@ -18,6 +18,8 @@ ikiwiki (3.20110716) UNRELEASED; urgency=low
     before Image::Magick.
   * Add unminified jquery js and css files to source.
   * Update to jquery 1.6.2, and jquery-ui 1.8.14.
     before Image::Magick.
   * Add unminified jquery js and css files to source.
   * Update to jquery 1.6.2, and jquery-ui 1.8.14.
+  * Use lockf rather than flock when taking the cgilock, for better
+    portability.
 
  -- Joey Hess <joeyh@debian.org>  Tue, 19 Jul 2011 11:22:52 -0400
 
 
  -- Joey Hess <joeyh@debian.org>  Tue, 19 Jul 2011 11:22:52 -0400
 
index 2913bfb535f825b32974af6d1022755da952d616..aca1ef106e9f65addb1e9175a6b2ea9113764c43 100644 (file)
@@ -28,4 +28,16 @@ to read
     if (lockfd != -1 && lockf(lockfd, F_LOCK,0) == 0) {
 
 
     if (lockfd != -1 && lockf(lockfd, F_LOCK,0) == 0) {
 
 
-in IkiWiki/Wrapper.pm  lets it compile, according to http://man-wiki.net/index.php/3:lockf "On  Linux, this call is just an interface for fcntl(2)"  does this seem like a sensible fix?
+in IkiWiki/Wrapper.pm  lets it compile, according to
+http://man-wiki.net/index.php/3:lockf "On  Linux, this call is just an
+interface for fcntl(2)"  does this seem like a sensible fix?a
+
+> Don't see why not. flock was used only because it's being used
+> in the same file for testing some other locks.
+> 
+> While lockf's fcntl locks are not inherited across a fork,
+> that doesn't matter for this lock, which is only used to
+> prevent more than one ikiwiki perl process being run at a time.
+> Nor is there any need to be compatible with some other user of this
+> lock; it's only checked in one place. [[applied|done]]
+> --[[Joey]]