summaryrefslogtreecommitdiff
path: root/src/lib/shm_rbuff.c
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2022-02-26 18:20:08 +0100
committerSander Vrijders <sander@ouroboros.rocks>2022-03-03 12:05:57 +0100
commit8969cd1f19409b110c761ed5dda1d6cb57399a64 (patch)
tree89cd87dccb5dacc8d2f3aacc85ca62776e555bf5 /src/lib/shm_rbuff.c
parent865515e2fe4651978f355613c5972dcdcfd92ddd (diff)
downloadouroboros-8969cd1f19409b110c761ed5dda1d6cb57399a64.tar.gz
ouroboros-8969cd1f19409b110c761ed5dda1d6cb57399a64.zip
lib: Flag all flows down as the IRMd exits
On exit of the IRMd all flows will now be flagged as down, so external applications will not hang anymore. Note: reads keep work from flows that are down until there are no more remaining packets in the buffer, but no more packets can be written. When the RIB is used, the external application may exit a bit later than the IRMd, so I added a brief sleep before the IRMd tries to remove the fuse main directory. Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks> Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'src/lib/shm_rbuff.c')
-rw-r--r--src/lib/shm_rbuff.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/src/lib/shm_rbuff.c b/src/lib/shm_rbuff.c
index 361d5bb0..d491c69a 100644
--- a/src/lib/shm_rbuff.c
+++ b/src/lib/shm_rbuff.c
@@ -69,20 +69,11 @@ struct shm_rbuff {
int flow_id; /* flow_id of the flow */
};
-void shm_rbuff_close(struct shm_rbuff * rb)
-{
- assert(rb);
-
- munmap(rb->shm_base, SHM_RB_FILE_SIZE);
-
- free(rb);
-}
-
#define MM_FLAGS (PROT_READ | PROT_WRITE)
-struct shm_rbuff * rbuff_create(pid_t pid,
- int flow_id,
- int flags)
+static struct shm_rbuff * rbuff_create(pid_t pid,
+ int flow_id,
+ int flags)
{
struct shm_rbuff * rb;
int fd;
@@ -130,6 +121,13 @@ struct shm_rbuff * rbuff_create(pid_t pid,
return NULL;
}
+static void rbuff_destroy(struct shm_rbuff * rb)
+{
+ munmap(rb->shm_base, SHM_RB_FILE_SIZE);
+
+ free(rb);
+}
+
struct shm_rbuff * shm_rbuff_create(pid_t pid,
int flow_id)
{
@@ -202,6 +200,13 @@ struct shm_rbuff * shm_rbuff_open(pid_t pid,
return rbuff_create(pid, flow_id, O_RDWR);
}
+void shm_rbuff_close(struct shm_rbuff * rb)
+{
+ assert(rb);
+
+ rbuff_destroy(rb);
+}
+
#if (defined(SHM_RBUFF_LOCKLESS) && \
(defined(__GNUC__) || defined (__clang__)))
#include "shm_rbuff_ll.c"