diff --git a/src/stick_table.c b/src/stick_table.c index a38a712a4..be8d3f999 100644 --- a/src/stick_table.c +++ b/src/stick_table.c @@ -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;