diff options
author | Dimitri Staessens <[email protected]> | 2021-06-26 13:42:58 +0200 |
---|---|---|
committer | Sander Vrijders <[email protected]> | 2021-06-28 15:29:23 +0200 |
commit | 9d2688340bea357e2c2206f3c69ea64c866cb2ad (patch) | |
tree | f677da48234c8d38178c0af29a7e680318d229ed | |
parent | 18b0de19830e7286ad5eecbba23013e835739cdc (diff) | |
download | ouroboros-9d2688340bea357e2c2206f3c69ea64c866cb2ad.tar.gz ouroboros-9d2688340bea357e2c2206f3c69ea64c866cb2ad.zip |
ipcpd: Fix unregistering fa and dt RIBs
These RIBs were not properly unregistered on shutdown.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
-rw-r--r-- | src/ipcpd/unicast/dt.c | 17 | ||||
-rw-r--r-- | src/ipcpd/unicast/fa.c | 6 |
2 files changed, 13 insertions, 10 deletions
diff --git a/src/ipcpd/unicast/dt.c b/src/ipcpd/unicast/dt.c index 38fb51f3..9f15e2da 100644 --- a/src/ipcpd/unicast/dt.c +++ b/src/ipcpd/unicast/dt.c @@ -58,8 +58,9 @@ #include <inttypes.h> #include <assert.h> -#define QOS_BLOCK_LEN 672 -#define STAT_FILE_LEN (189 + QOS_BLOCK_LEN * QOS_CUBE_MAX) +#define QOS_BLOCK_LEN 672 +#define RIB_FILE_STRLEN (189 + QOS_BLOCK_LEN * QOS_CUBE_MAX) +#define RIB_NAME_STRLEN 256 #ifndef CLOCK_REALTIME_COARSE #define CLOCK_REALTIME_COARSE CLOCK_REALTIME @@ -192,7 +193,7 @@ static int dt_rib_read(const char * path, /* NOTE: we may need stronger checks. */ fd = atoi(path); - if (len < STAT_FILE_LEN) + if (len < RIB_FILE_STRLEN) return 0; buf[0] = '\0'; @@ -261,7 +262,7 @@ static int dt_rib_read(const char * path, pthread_mutex_unlock(&dt.stat[fd].lock); - return STAT_FILE_LEN; + return RIB_FILE_STRLEN; #else (void) path; (void) buf; @@ -339,7 +340,7 @@ static int dt_rib_getattr(const char * path, pthread_mutex_lock(&dt.stat[fd].lock); if (dt.stat[fd].stamp != -1) { - attr->size = STAT_FILE_LEN; + attr->size = RIB_FILE_STRLEN; attr->mtime = dt.stat[fd].stamp; } else { attr->size = 0; @@ -561,7 +562,7 @@ int dt_init(enum pol_routing pr, { int i; int j; - char dtstr[256]; + char dtstr[RIB_NAME_STRLEN + 1]; int pp; struct conn_info info; @@ -676,9 +677,11 @@ int dt_init(enum pol_routing pr, void dt_fini(void) { + char dtstr[RIB_NAME_STRLEN + 1]; int i; - rib_unreg(DT); + sprintf(dtstr, "%s.%" PRIu64, DT, ipcpi.dt_addr); + rib_unreg(dtstr); #ifdef IPCP_FLOW_STATS for (i = 0; i < PROG_MAX_FLOWS; ++i) pthread_mutex_destroy(&dt.stat[i].lock); diff --git a/src/ipcpd/unicast/fa.c b/src/ipcpd/unicast/fa.c index 428b5af7..de9ca83d 100644 --- a/src/ipcpd/unicast/fa.c +++ b/src/ipcpd/unicast/fa.c @@ -591,7 +591,6 @@ static void * fa_handle_packet(void * o) int fa_init(void) { pthread_condattr_t cattr; - char fastr[256]; if (pthread_rwlock_init(&fa.flows_lock, NULL)) goto fail_rwlock; @@ -612,8 +611,7 @@ int fa_init(void) list_head_init(&fa.cmds); - sprintf(fastr, "%s", FA); - if (rib_reg(fastr, &r_ops)) + if (rib_reg(FA, &r_ops)) goto fail_rib_reg; fa.eid = dt_reg_comp(&fa, &fa_post_packet, FA); @@ -637,6 +635,8 @@ int fa_init(void) void fa_fini(void) { + rib_unreg(FA); + pthread_cond_destroy(&fa.cond);; pthread_mutex_destroy(&fa.mtx); pthread_rwlock_destroy(&fa.flows_lock); |