commit 6fd4544740150d11a6120c8cf7ef7df949527dc9 from: Nikolay Shirokovskiy via: Vladimir Davydov date: Wed Sep 04 10:24:59 2024 UTC box: free txn limbo on exit Part-of #10211 NO_TEST=internal NO_CHANGELOG=internal NO_DOC=internal commit - 18e79a83874d1e94514f4eba3321718ba97fde9a commit + 6fd4544740150d11a6120c8cf7ef7df949527dc9 blob - 4c6957d974784b5a4635b2a34fbfa9fc43755a36 blob + 160c41f6d3612ba1c903ffb97371adfed20eec11 --- src/box/box.cc +++ src/box/box.cc @@ -6228,6 +6228,8 @@ box_free(void) { /* References engines. */ space_cache_destroy(); + /* References engine tuples. */ + txn_limbo_free(); box_storage_free(); builtin_events_free(); security_free(); blob - cf12f5459c5a5604190442fdf98e3a3fbd780c81 blob + 05529f5c08467ed752bfc40bb4c3beba398e8de7 --- src/box/txn.c +++ src/box/txn.c @@ -457,10 +457,7 @@ txn_new(void) return txn; } -/* - * Free txn memory and return it to a cache. - */ -inline static void +void txn_free(struct txn *txn) { assert(txn->limbo_entry == NULL); blob - a88f7361b0cad59d296b9dba6b95c20baaaa9782 blob + e3b2d2626e15f8fbbd3e84748b8818b5fdd86565 --- src/box/txn.h +++ src/box/txn.h @@ -1050,6 +1050,12 @@ tx_region_acquire(struct txn *txn); */ void tx_region_release(struct txn *txn, enum tx_alloc_type alloc_type); + +/* + * Free txn memory and return it to a cache. + */ +void +txn_free(struct txn *txn); /** * FFI bindings: do not throw exceptions, do not accept extra blob - bc6de2cb5acce780ca822573144adfd33cecb6f0 blob + 2f3d9ba1243411db071504c4aef7810cdfe01855 --- src/box/txn_limbo.c +++ src/box/txn_limbo.c @@ -60,6 +60,20 @@ txn_limbo_create(struct txn_limbo *limbo) limbo->is_frozen_until_promotion = true; limbo->do_validate = false; limbo->confirm_lag = 0; +} + +static inline void +txn_limbo_destroy(struct txn_limbo *limbo) +{ + struct txn_limbo_entry *entry; + while (!rlist_empty(&limbo->queue)) { + entry = rlist_shift_entry(&limbo->queue, + typeof(*entry), in_queue); + entry->txn->limbo_entry = NULL; + txn_free(entry->txn); + } + fiber_cond_destroy(&limbo->wait_cond); + TRASH(limbo); } static inline bool @@ -1324,3 +1338,9 @@ txn_limbo_init(void) { txn_limbo_create(&txn_limbo); } + +void +txn_limbo_free(void) +{ + txn_limbo_destroy(&txn_limbo); +} blob - d2774d166dc009f91777f1c6b502fea631fa5080 blob + bc879af4ba6bd1e096e1b523141a5e195ae3b98c --- src/box/txn_limbo.h +++ src/box/txn_limbo.h @@ -487,6 +487,12 @@ txn_limbo_has_owner(struct txn_limbo *limbo) */ void txn_limbo_init(); + +/** + * Denitialize qsync engine. + */ +void +txn_limbo_free(); #if defined(__cplusplus) }