static int vacuum_child_destructor(struct ctdb_vacuum_child_context *child_ctx)
{
double l = timeval_elapsed(&child_ctx->start_time);
- struct ctdb_db_context *ctdb_db = child_ctx->vacuum_handle->ctdb_db;
+ struct ctdb_vacuum_handle *vacuum_handle = child_ctx->vacuum_handle;
+ struct ctdb_db_context *ctdb_db = vacuum_handle->ctdb_db;
struct ctdb_context *ctdb = ctdb_db->ctdb;
CTDB_UPDATE_DB_LATENCY(ctdb_db, "vacuum", vacuum.latency, l);
ctdb_kill(ctdb, child_ctx->child_pid, SIGKILL);
} else {
/* Bump the number of successful fast-path runs. */
- child_ctx->vacuum_handle->fast_path_count++;
+ vacuum_handle->fast_path_count++;
}
ctdb->vacuumer = NULL;
if (child_ctx->scheduled) {
tevent_add_timer(
ctdb->ev,
- child_ctx->vacuum_handle,
+ vacuum_handle,
timeval_current_ofs(get_vacuum_interval(ctdb_db), 0),
ctdb_vacuum_event,
- child_ctx->vacuum_handle);
+ vacuum_handle);
}
return 0;
*/
int ctdb_vacuum_init(struct ctdb_db_context *ctdb_db)
{
+ struct ctdb_vacuum_handle *vacuum_handle;
+
if (! ctdb_db_volatile(ctdb_db)) {
DEBUG(DEBUG_ERR,
("Vacuuming is disabled for non-volatile database %s\n",
return 0;
}
- ctdb_db->vacuum_handle = talloc(ctdb_db, struct ctdb_vacuum_handle);
- CTDB_NO_MEMORY(ctdb_db->ctdb, ctdb_db->vacuum_handle);
+ vacuum_handle = talloc(ctdb_db, struct ctdb_vacuum_handle);
+ if (vacuum_handle == NULL) {
+ DBG_ERR("Memory allocation error\n");
+ return -1;
+ }
+
+ vacuum_handle->ctdb_db = ctdb_db;
+ vacuum_handle->fast_path_count = 0;
- ctdb_db->vacuum_handle->ctdb_db = ctdb_db;
- ctdb_db->vacuum_handle->fast_path_count = 0;
+ ctdb_db->vacuum_handle = vacuum_handle;
- tevent_add_timer(ctdb_db->ctdb->ev, ctdb_db->vacuum_handle,
+ tevent_add_timer(ctdb_db->ctdb->ev,
+ vacuum_handle,
timeval_current_ofs(get_vacuum_interval(ctdb_db), 0),
- ctdb_vacuum_event, ctdb_db->vacuum_handle);
+ ctdb_vacuum_event,
+ vacuum_handle);
return 0;
}