]> the.earth.li Git - onak.git/commitdiff
Check return value when writing PID to DB4 upgrade lock file
authorJonathan McDowell <noodles@earth.li>
Sun, 5 Jan 2014 17:50:55 +0000 (17:50 +0000)
committerJonathan McDowell <noodles@earth.li>
Sun, 5 Jan 2014 17:50:55 +0000 (17:50 +0000)
When writing our PID to the lock file for upgrading the DB4 version
we didn't check it was actually successful. This doesn't matter in
general (because it's the existence or not of the file we care about)
but catch it and error out appropriate anyway.

keydb_db4.c

index b36ce3f65dba9e18408c0b86c6e6f35c72600f6b..369788ea6133c06f92d2b4567be8693f65a8984e 100644 (file)
@@ -169,6 +169,7 @@ static int db4_upgradedb(struct onak_db4_dbctx *privctx)
        char buf[1024];
        int lockfile_fd;
        struct stat statbuf;
+       ssize_t written;
 
        snprintf(buf, sizeof(buf) - 1, "%s/%s", config.db_dir,
                        DB4_UPGRADE_FILE);
@@ -184,8 +185,16 @@ static int db4_upgradedb(struct onak_db4_dbctx *privctx)
                }
        }
        snprintf(buf, sizeof(buf) - 1, "%d", getpid());
-       write(lockfile_fd, buf, strlen(buf));
+       written = write(lockfile_fd, buf, strlen(buf));
        close(lockfile_fd);
+       if (written != strlen(buf)) {
+               logthing(LOGTHING_CRITICAL, "Couldn't write PID to lockfile: "
+                               "%s", strerror(errno));
+               snprintf(buf, sizeof(buf) - 1, "%s/%s", config.db_dir,
+                               DB4_UPGRADE_FILE);
+               unlink(buf);
+               return -1;
+       }
 
        logthing(LOGTHING_NOTICE, "Upgrading DB4 database");
        ret = db_env_create(&privctx->dbenv, 0);