summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaria Matejka <mq@ucw.cz>2022-09-07 15:06:22 +0200
committerMaria Matejka <mq@ucw.cz>2022-09-08 15:13:37 +0200
commit5103de4e8ed7f4744326129a4296cf3511b1e1f9 (patch)
tree789b4a1928ef6990962a8de1d0f5758318fc05f2
parente2c612063649cb5134459ab0a2c7377f00d6e9c0 (diff)
Table long-locking debug code
-rw-r--r--nest/rt-table.c10
-rw-r--r--nest/rt.h8
2 files changed, 11 insertions, 7 deletions
diff --git a/nest/rt-table.c b/nest/rt-table.c
index eb53eff7..cdf0fd3e 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 987a9ff8..82d74296 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);