]> git.puffer.fish Git - matthieu/frr.git/commitdiff
2004-11-25 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
authorajs <ajs>
Thu, 25 Nov 2004 16:07:53 +0000 (16:07 +0000)
committerajs <ajs>
Thu, 25 Nov 2004 16:07:53 +0000 (16:07 +0000)
* pid_output.c: (pid_output_lock) Fix 2 bugs: when locking, should
  set l_whence to SEEK_SET, not SEEK_END.  And after writing new
  pid to file, must ftruncate to eliminate any extraneous bytes left
  over from the last time a pid was written.

lib/ChangeLog
lib/pid_output.c

index 6ba1d6f4f120e497643fab0c05ca7035906f176e..d1fa0f4c7bad8a834f947558c7c751ef0649d023 100644 (file)
@@ -1,3 +1,10 @@
+2004-11-25 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
+
+       * pid_output.c: (pid_output_lock) Fix 2 bugs: when locking, should
+         set l_whence to SEEK_SET, not SEEK_END.  And after writing new
+         pid to file, must ftruncate to eliminate any extraneous bytes left
+         over from the last time a pid was written.
+
 2004-11-24 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
 
        * zassert.h: New header file to declare a quagga-specific assert macro.
index 2782b9d43a4cfed407170c399c19976e39dbbfe0..ae3393c17dee9fdd682b494f97bde3f648c53575 100644 (file)
@@ -23,8 +23,7 @@
 #include <zebra.h>
 #include <fcntl.h>
 #include <log.h>
-
-pid_t pid_output_lock(const char *);
+#include "version.h"
 
 pid_t
 pid_output (const char *path)
@@ -77,11 +76,13 @@ pid_output_lock (const char *path)
     }
   else
     {
+      size_t pidsize;
+
       umask(oldumask);
       memset (&lock, 0, sizeof(lock));
 
       lock.l_type = F_WRLCK;
-      lock.l_whence = SEEK_END;
+      lock.l_whence = SEEK_SET;
 
       if (fcntl(fd, F_SETLK, &lock) < 0)
         {
@@ -90,7 +91,13 @@ pid_output_lock (const char *path)
         }
 
       sprintf (buf, "%d\n", (int) pid);
-      tmp = write (fd, buf, strlen (buf));
+      pidsize = strlen(buf);
+      if ((tmp = write (fd, buf, pidsize)) != (int)pidsize)
+        zlog_err("Could not write pid %d to pid_file %s, rc was %d: %s",
+                (int)pid,path,tmp,safe_strerror(errno));
+      else if (ftruncate(fd, pidsize) < 0)
+        zlog_err("Could not truncate pid_file %s to %u bytes: %s",
+                path,(u_int)pidsize,safe_strerror(errno));
     }
   return pid;
 }