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: https://the.earth.li/gitweb/?a=commitdiff_plain;h=b2f2bc60555e2d953069c40d8d3cdecfcec9ac29;p=onak.git 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);