From ad759a00d461210886c3246f3cd2aa55b661788c Mon Sep 17 00:00:00 2001 From: Frank Lahm Date: Tue, 3 Jan 2012 15:20:46 +0100 Subject: [PATCH 1/1] Remove bdb env on exit --- NEWS | 3 +++ etc/cnid_dbd/cmd_dbd.c | 21 +++++++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/NEWS b/NEWS index 6d8fcd93..1ef0583b 100644 --- a/NEWS +++ b/NEWS @@ -30,6 +30,9 @@ Changes in 2.2.2 * FIX: afpd: Fix dircache bug, NetAFP Bug ID #13 * FIX: dbd: Better checking for duplicated or bogus CNIDs from AppleDouble files +* FIX: dbd: Remove BerkeleyDB database environment after running `dbd`. This + is crucial for the automatic BerkeleyDB database upgrade feature which + is built into cnid_dbd and dbd. * FIX: Fix compilation error when AppleTalk support is disabled * FIX: Portability fixes * FIX: search of surrogate pair diff --git a/etc/cnid_dbd/cmd_dbd.c b/etc/cnid_dbd/cmd_dbd.c index 440f40b1..3b81b8b5 100644 --- a/etc/cnid_dbd/cmd_dbd.c +++ b/etc/cnid_dbd/cmd_dbd.c @@ -364,22 +364,22 @@ int main(int argc, char **argv) /* Get db lock */ if ((db_locked = get_lock(LOCK_EXCL, dbpath)) == -1) - goto exit_failure; + goto exit_noenv; if (db_locked != LOCK_EXCL) { /* Couldn't get exclusive lock, try shared lock if -e wasn't requested */ if (exclusive) { dbd_log(LOGSTD, "Database is in use and exlusive was requested"); - goto exit_failure; + goto exit_noenv; } if ((db_locked = get_lock(LOCK_SHRD, NULL)) != LOCK_SHRD) - goto exit_failure; + goto exit_noenv; } /* Check if -f is requested and wipe db if yes */ if ((flags & DBD_FLAGS_FORCE) && rebuild && (volinfo.v_flags & AFPVOL_CACHE)) { char cmd[8 + MAXPATHLEN]; if ((db_locked = get_lock(LOCK_FREE, NULL)) != 0) - goto exit_failure; + goto exit_noenv; snprintf(cmd, 8 + MAXPATHLEN, "rm -rf \"%s\"", dbpath); dbd_log( LOGDEBUG, "Removing old database of volume: '%s'", volpath); @@ -390,7 +390,7 @@ int main(int argc, char **argv) } dbd_log( LOGDEBUG, "Removed old database."); if ((db_locked = get_lock(LOCK_EXCL, dbpath)) == -1) - goto exit_failure; + goto exit_noenv; } /* @@ -398,13 +398,13 @@ int main(int argc, char **argv) */ if ( ! nocniddb) { if ((dbd = dbif_init(dbpath, "cnid2.db")) == NULL) - goto exit_failure; + goto exit_noenv; if (dbif_env_open(dbd, &db_param, (db_locked == LOCK_EXCL) ? (DBOPTIONS | DB_RECOVER) : DBOPTIONS) < 0) { dbd_log( LOGSTD, "error opening database!"); - goto exit_failure; + goto exit_noenv; } if (db_locked == LOCK_EXCL) @@ -455,8 +455,13 @@ exit_success: ret = 0; exit_failure: + if (dbif_env_remove(dbpath) < 0) { + dbd_log( LOGSTD, "Error removing BerkeleyDB database environment"); + ret++; + } get_lock(0, NULL); - + +exit_noenv: if ((fchdir(cdir)) < 0) dbd_log(LOGSTD, "fchdir: %s", strerror(errno)); -- 2.39.2