static struct db_record *dbwrap_fetch_locked_internal( struct db_context *db, TALLOC_CTX *mem_ctx, TDB_DATA key, struct db_record *(*db_fn)(struct db_context *db, TALLOC_CTX *mem_ctx, TDB_DATA key)) { struct db_record *rec; struct dbwrap_lock_order_state *lock_order = NULL; if (db->lock_order != DBWRAP_LOCK_ORDER_NONE) { lock_order = dbwrap_check_lock_order(db, mem_ctx); if (lock_order == NULL) { return NULL; } } rec = db_fn(db, mem_ctx, key); if (rec == NULL) { TALLOC_FREE(lock_order); return NULL; } (void)talloc_steal(rec, lock_order); rec->db = db; return rec; }
static struct db_record *dbwrap_fetch_locked_internal( struct db_context *db, TALLOC_CTX *mem_ctx, TDB_DATA key, struct db_record *(*db_fn)(struct db_context *db, TALLOC_CTX *mem_ctx, TDB_DATA key)) { struct db_record *rec; struct dbwrap_lock_order_state *lock_order; TALLOC_CTX *frame = talloc_stackframe(); lock_order = dbwrap_check_lock_order(db, frame); if (lock_order == NULL) { TALLOC_FREE(frame); return NULL; } rec = db_fn(db, mem_ctx, key); if (rec == NULL) { TALLOC_FREE(frame); return NULL; } (void)talloc_steal(rec, lock_order); rec->db = db; TALLOC_FREE(frame); return rec; }