X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/cdabf44d4bf72678b402c0fd7dac394eb36513da..3f3cd4c942b8a5f15306ac8ca0d9cfcd4e9391b7:/lib/trackdb.c diff --git a/lib/trackdb.c b/lib/trackdb.c index da5685a..4afd925 100644 --- a/lib/trackdb.c +++ b/lib/trackdb.c @@ -2736,16 +2736,18 @@ int trackdb_rescan_underway(void) { * @param name Global preference name * @param value New value * @param who Who is setting it + * @return 0 on success, -1 on error */ -void trackdb_set_global(const char *name, +int trackdb_set_global(const char *name, const char *value, const char *who) { DB_TXN *tid; - int state; + int state, err; for(;;) { tid = trackdb_begin_transaction(); - if(!trackdb_set_global_tid(name, value, tid)) + err = trackdb_set_global_tid(name, value, tid); + if(err != DB_LOCK_DEADLOCK) break; trackdb_abort_transaction(tid); } @@ -2765,6 +2767,8 @@ void trackdb_set_global(const char *name, who ? who : "-"); eventlog("state", state ? "enable_random" : "disable_random", (char *)0); } + eventlog("global_pref", name, value, (char *)0); + return err == 0 ? 0 : -1; } /** @brief Set a global preference @@ -2790,7 +2794,7 @@ int trackdb_set_global_tid(const char *name, err = trackdb_globaldb->put(trackdb_globaldb, tid, &k, &d, 0); else err = trackdb_globaldb->del(trackdb_globaldb, tid, &k, 0); - if(err == DB_LOCK_DEADLOCK) return err; + if(err == DB_LOCK_DEADLOCK || err == DB_NOTFOUND) return err; if(err) disorder_fatal(0, "error updating database: %s", db_strerror(err)); return 0;