summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2020-03-18 21:53:21 +0100
committerSander Vrijders <sander@ouroboros.rocks>2020-03-20 12:10:44 +0100
commit5a4bd2f65b38a891237b3d73255eff3493082788 (patch)
tree907c1dce708527f37010b1154fd43ea19eed0acd
parentf5b97219d7e44569612a17e7b257f97b8f723d72 (diff)
downloadouroboros-5a4bd2f65b38a891237b3d73255eff3493082788.zip
ouroboros-5a4bd2f65b38a891237b3d73255eff3493082788.tar.gz
irmd: Fix cleanup of shm_flow_set0.17.1
The shm_flowset destroy was using the irmd pid, resulting in wrong unlinks. The irmd was not cleaning up the process table, resulting in shm leaks if there were still running processes on exit. Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks> Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
-rw-r--r--CMakeLists.txt2
-rw-r--r--src/irmd/main.c7
-rw-r--r--src/lib/shm_flow_set.c2
3 files changed, 9 insertions, 2 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d89b028..8cce6a1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -9,7 +9,7 @@ include(GNUInstallDirs)
set(PACKAGE_VERSION_MAJOR 0)
set(PACKAGE_VERSION_MINOR 17)
-set(PACKAGE_VERSION_PATCH 0)
+set(PACKAGE_VERSION_PATCH 1)
set(PACKAGE_NAME "${CMAKE_PROJECT_NAME}")
set(PACKAGE_DESCRIPTION "The Ouroboros prototype")
diff --git a/src/irmd/main.c b/src/irmd/main.c
index 940432f..1c928dc 100644
--- a/src/irmd/main.c
+++ b/src/irmd/main.c
@@ -1780,6 +1780,13 @@ static void irm_fini(void)
prog_entry_destroy(e);
}
+ list_for_each_safe(p, h, &irmd.proc_table) {
+ struct proc_entry * e = list_entry(p, struct proc_entry, next);
+ list_del(&e->next);
+ e->state = PROC_INIT; /* sanitizer already joined */
+ proc_entry_destroy(e);
+ }
+
registry_destroy(&irmd.registry);
pthread_rwlock_unlock(&irmd.reg_lock);
diff --git a/src/lib/shm_flow_set.c b/src/lib/shm_flow_set.c
index c19adaf..0f701b6 100644
--- a/src/lib/shm_flow_set.c
+++ b/src/lib/shm_flow_set.c
@@ -148,7 +148,7 @@ struct shm_flow_set * shm_flow_set_create(pid_t pid)
if (set == NULL)
goto fail_set;
- set->pid = getpid();
+ set->pid = pid;
if (pthread_mutexattr_init(&mattr))
goto fail_mutexattr_init;