/* * Destructor to kill the child locking process */ static int ctdb_lock_context_destructor(struct lock_context *lock_ctx) { if (lock_ctx->request) { lock_ctx->request->lctx = NULL; } if (lock_ctx->child > 0) { ctdb_kill(lock_ctx->ctdb, lock_ctx->child, SIGTERM); if (lock_ctx->type == LOCK_RECORD) { DLIST_REMOVE(lock_ctx->ctdb_db->lock_current, lock_ctx); } else { DLIST_REMOVE(lock_ctx->ctdb->lock_current, lock_ctx); } if (lock_ctx->ctdb_db) { lock_ctx->ctdb_db->lock_num_current--; } CTDB_DECREMENT_STAT(lock_ctx->ctdb, locks.num_current); if (lock_ctx->ctdb_db) { CTDB_DECREMENT_DB_STAT(lock_ctx->ctdb_db, locks.num_current); } } else { if (lock_ctx->type == LOCK_RECORD) { DLIST_REMOVE(lock_ctx->ctdb_db->lock_pending, lock_ctx); } else { DLIST_REMOVE(lock_ctx->ctdb->lock_pending, lock_ctx); } CTDB_DECREMENT_STAT(lock_ctx->ctdb, locks.num_pending); if (lock_ctx->ctdb_db) { CTDB_DECREMENT_DB_STAT(lock_ctx->ctdb_db, locks.num_pending); } } ctdb_lock_schedule(lock_ctx->ctdb); return 0; }
/* * Destructor to kill the child locking process */ static int ctdb_lock_context_destructor(struct lock_context *lock_ctx) { if (lock_ctx->child > 0) { ctdb_kill(lock_ctx->ctdb, lock_ctx->child, SIGKILL); DLIST_REMOVE(lock_ctx->ctdb->lock_current, lock_ctx); if (lock_ctx->ctdb_db) { lock_ctx->ctdb_db->lock_num_current--; } CTDB_DECREMENT_STAT(lock_ctx->ctdb, locks.num_current); if (lock_ctx->type == LOCK_RECORD || lock_ctx->type == LOCK_DB) { CTDB_DECREMENT_DB_STAT(lock_ctx->ctdb_db, locks.num_current); } } else { DLIST_REMOVE(lock_ctx->ctdb->lock_pending, lock_ctx); lock_ctx->ctdb->lock_num_pending--; CTDB_DECREMENT_STAT(lock_ctx->ctdb, locks.num_pending); if (lock_ctx->type == LOCK_RECORD || lock_ctx->type == LOCK_DB) { CTDB_DECREMENT_DB_STAT(lock_ctx->ctdb_db, locks.num_pending); } } ctdb_lock_schedule(lock_ctx->ctdb); return 0; }