From e5879ca1d8ea26870dbf74f330f5e6f5a9c93bfa Mon Sep 17 00:00:00 2001 From: ajs Date: Thu, 25 Nov 2004 16:07:53 +0000 Subject: 2004-11-25 Andrew J. Schorr * 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 | 7 +++++++ lib/pid_output.c | 15 +++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/ChangeLog b/lib/ChangeLog index 6ba1d6f4..d1fa0f4c 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,10 @@ +2004-11-25 Andrew J. Schorr + + * 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 * zassert.h: New header file to declare a quagga-specific assert macro. diff --git a/lib/pid_output.c b/lib/pid_output.c index 2782b9d4..ae3393c1 100644 --- a/lib/pid_output.c +++ b/lib/pid_output.c @@ -23,8 +23,7 @@ #include #include #include - -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; } -- cgit v1.2.1