WIP/MEDIUM: stktables: Use a try-lock on the updates list when removing a stksess

This commit is contained in:
Christopher Faulet 2025-10-16 11:35:55 +02:00
parent 7600b2dba4
commit e29863934e

View File

@ -138,7 +138,9 @@ int __stksess_kill(struct stktable *t, struct stksess *ts)
/* ... and that we didn't leave the update list for the tree */
if (MT_LIST_INLIST(&ts->upd)) {
link = mt_list_lock_full(&ts->upd);
link = mt_list_try_lock_full(&ts->upd);
if (link.next == NULL)
goto out;
if (HA_ATOMIC_LOAD(&ts->ref_cnt)) {
mt_list_unlock_full(&ts->upd, link);
goto out;
@ -385,7 +387,9 @@ int stktable_trash_oldest(struct stktable *t)
MT_LIST_DELETE(&ts->pend_updts);
if (MT_LIST_INLIST(&ts->upd)) {
link = mt_list_lock_full(&ts->upd);
link = mt_list_try_lock_full(&ts->upd);
if (link.next == NULL)
goto requeue;
if (HA_ATOMIC_LOAD(&ts->ref_cnt)) {
mt_list_unlock_full(&ts->upd, link);
goto requeue;
@ -1001,7 +1005,9 @@ struct task *process_table_expire(struct task *task, void *context, unsigned int
*/
MT_LIST_DELETE(&ts->pend_updts);
if (MT_LIST_INLIST(&ts->upd)) {
link = mt_list_lock_full(&ts->upd);
link = mt_list_try_lock_full(&ts->upd);
if (link.next == NULL)
goto requeue;
if (HA_ATOMIC_LOAD(&ts->ref_cnt)) {
mt_list_unlock_full(&ts->upd, link);
goto requeue;