vacuum: fix crash on vacuum abort
authorRusty Russell <rusty@rustcorp.com.au>
Mon, 26 Jul 2010 06:38:07 +0000 (16:08 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Wed, 18 Aug 2010 01:30:11 +0000 (11:00 +0930)
Martin Schwenke discovered that 517f05e42f17766b1e8db8f1f4789cbad968e304
("freeze: abort vacuuming when we're going to freeze.") used ctdb_db for
a logging message which is in fact uninitialized, causing a crash (even
if it wasn't actually logged).

Initialize it properly.  Also fix incorrect format in another logging
message introduced in that same change.

CQ:S1019093
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
server/ctdb_vacuum.c

index 17afd79afde343ad81ef97a3a9b62713bc3fa074..59ce0ec284350e36ae362d9047a019350b5dba15 100644 (file)
@@ -636,6 +636,7 @@ static int ctdb_repack_db(struct ctdb_db_context *ctdb_db, TALLOC_CTX *mem_ctx)
        vdata->vacuum_limit = vacuum_limit;
        vdata->repack_limit = repack_limit;
        vdata->delete_tree = trbt_create(vdata, 0);
+       vdata->ctdb_db = ctdb_db;
        if (vdata->delete_tree == NULL) {
                DEBUG(DEBUG_ERR,(__location__ " Out of memory\n"));
                talloc_free(vdata);
@@ -887,9 +888,9 @@ void ctdb_stop_vacuuming(struct ctdb_context *ctdb)
 {
        /* Simply free them all. */
        while (ctdb->vacuumers) {
-               DEBUG(DEBUG_INFO, ("Aborting vacuuming for %s (%p)\n",
+               DEBUG(DEBUG_INFO, ("Aborting vacuuming for %s (%i)\n",
                           ctdb->vacuumers->vacuum_handle->ctdb_db->db_name,
-                          ctdb->vacuumers->child_pid));
+                          (int)ctdb->vacuumers->child_pid));
                /* vacuum_child_destructor kills it, removes from list */
                talloc_free(ctdb->vacuumers);
        }