From: Jonathan McDowell Date: Sun, 5 Jan 2014 17:50:55 +0000 (+0000) Subject: Check return value when writing PID to DB4 upgrade lock file X-Git-Tag: onak-0.4.3~17 X-Git-Url: http://the.earth.li/gitweb/?p=onak.git;a=commitdiff_plain;h=b2f2bc60555e2d953069c40d8d3cdecfcec9ac29 Check return value when writing PID to DB4 upgrade lock file 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. --- diff --git a/keydb_db4.c b/keydb_db4.c index b36ce3f..369788e 100644 --- a/keydb_db4.c +++ b/keydb_db4.c @@ -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);