From: Maria Matejka Date: Wed, 7 Sep 2022 13:06:22 +0000 (+0200) Subject: Table long-locking debug code X-Git-Tag: v3.0-alpha1~147 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5103de4e8ed7f4744326129a4296cf3511b1e1f9;p=thirdparty%2Fbird.git Table long-locking debug code --- diff --git a/nest/rt-table.c b/nest/rt-table.c index eb53eff7e..cdf0fd3e9 100644 --- a/nest/rt-table.c +++ b/nest/rt-table.c @@ -3680,10 +3680,10 @@ rt_new_table(struct symbol *s, uint addr_type) * preventing it from being freed when it gets undefined in a new * configuration. */ -void -rt_lock_table(rtable *r) +void rt_lock_table_debug(rtable *tab, const char *file, uint line) { - r->use_count++; + rt_trace(tab, D_STATES, "Locked at %s:%d", file, line); + tab->use_count++; } /** @@ -3694,9 +3694,9 @@ rt_lock_table(rtable *r) * that is decrease its use count and delete it if it's scheduled * for deletion by configuration changes. */ -void -rt_unlock_table(rtable *r) +void rt_unlock_table_debug(rtable *r, const char *file, uint line) { + rt_trace(r, D_STATES, "Unlocked at %s:%d", file, line); if (!--r->use_count && r->deleted) { struct config *conf = r->deleted; diff --git a/nest/rt.h b/nest/rt.h index 987a9ff84..82d742966 100644 --- a/nest/rt.h +++ b/nest/rt.h @@ -482,8 +482,12 @@ void rt_init(void); void rt_preconfig(struct config *); void rt_postconfig(struct config *); void rt_commit(struct config *new, struct config *old); -void rt_lock_table(rtable *); -void rt_unlock_table(rtable *); + +void rt_lock_table_debug(rtable *, const char *file, uint line); +void rt_unlock_table_debug(rtable *, const char *file, uint line); +#define rt_lock_table(tab) rt_lock_table_debug(tab, __FILE__, __LINE__) +#define rt_unlock_table(tab) rt_unlock_table_debug(tab, __FILE__, __LINE__) + struct f_trie * rt_lock_trie(rtable *tab); void rt_unlock_trie(rtable *tab, struct f_trie *trie); void rt_flowspec_link(rtable *src, rtable *dst);