summaryrefslogtreecommitdiff
path: root/src/irmd
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri.staessens@ugent.be>2018-12-21 16:16:46 +0100
committerSander Vrijders <sander.vrijders@ugent.be>2018-12-22 10:20:31 +0100
commit8eed1b3fc3d4e3261a68855ccc54c35102738a79 (patch)
tree28cbf1e57f267330aae761fa27d47821f7954fb4 /src/irmd
parent933aa5ab479732d84b3331ef4638dd9be07695b2 (diff)
downloadouroboros-8eed1b3fc3d4e3261a68855ccc54c35102738a79.tar.gz
ouroboros-8eed1b3fc3d4e3261a68855ccc54c35102738a79.zip
irmd: Manage shm_flow_set from IRMd
This moves the creation and destruction of shm_flow_set shared memory structures from the init to the IRMd. Now the management of all shared data objects is performed by the IRMd. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
Diffstat (limited to 'src/irmd')
-rw-r--r--src/irmd/proc_table.c55
-rw-r--r--src/irmd/proc_table.h21
2 files changed, 41 insertions, 35 deletions
diff --git a/src/irmd/proc_table.c b/src/irmd/proc_table.c
index 6f9d8e20..27fbb505 100644
--- a/src/irmd/proc_table.c
+++ b/src/irmd/proc_table.c
@@ -50,41 +50,44 @@ struct proc_entry * proc_entry_create(pid_t pid,
e = malloc(sizeof(*e));
if (e == NULL)
- return NULL;
+ goto fail_malloc;
- list_head_init(&e->next);
- list_head_init(&e->names);
-
- e->pid = pid;
- e->prog = prog;
- e->daf_name = NULL;
-
- e->re = NULL;
-
- e->state = PROC_INIT;
-
- if (pthread_condattr_init(&cattr)) {
- free(e);
- return NULL;
- }
+ if (pthread_condattr_init(&cattr))
+ goto fail_condattr;
#ifndef __APPLE__
pthread_condattr_setclock(&cattr, PTHREAD_COND_CLOCK);
#endif
- if (pthread_mutex_init(&e->lock, NULL)) {
- free(e);
- return NULL;
- }
+ if (pthread_mutex_init(&e->lock, NULL))
+ goto fail_mutex;
+ if (pthread_cond_init(&e->cond, &cattr))
+ goto fail_cond;
- if (pthread_cond_init(&e->cond, &cattr)) {
- pthread_mutex_destroy(&e->lock);
- free(e);
- return NULL;
- }
+ e->set = shm_flow_set_create(pid);
+ if (e->set == NULL)
+ goto fail_set;
+
+ list_head_init(&e->next);
+ list_head_init(&e->names);
+
+ e->pid = pid;
+ e->prog = prog;
+ e->re = NULL;
+ e->state = PROC_INIT;
return e;
+ fail_set:
+ pthread_cond_destroy(&e->cond);;
+ fail_cond:
+ pthread_mutex_destroy(&e->lock);
+ fail_mutex:
+ pthread_condattr_destroy(&cattr);
+ fail_condattr:
+ free(e);
+ fail_malloc:
+ return NULL;
}
static void cancel_proc_entry(void * o)
@@ -124,6 +127,8 @@ void proc_entry_destroy(struct proc_entry * e)
pthread_mutex_unlock(&e->lock);
+ shm_flow_set_destroy(e->set);
+
pthread_cond_destroy(&e->cond);
pthread_mutex_destroy(&e->lock);
diff --git a/src/irmd/proc_table.h b/src/irmd/proc_table.h
index f3ef9aff..a18b0d8c 100644
--- a/src/irmd/proc_table.h
+++ b/src/irmd/proc_table.h
@@ -23,7 +23,8 @@
#ifndef OUROBOROS_IRMD_PROC_TABLE_H
#define OUROBOROS_IRMD_PROC_TABLE_H
-#include "time.h"
+#include <ouroboros/shm_flow_set.h>
+
#include "utils.h"
#include <unistd.h>
@@ -38,18 +39,18 @@ enum proc_state {
};
struct proc_entry {
- struct list_head next;
- pid_t pid;
- char * prog; /* program instantiated */
- char * daf_name; /* DAF this process belongs to */
- struct list_head names; /* names for which process accepts flows */
+ struct list_head next;
+ pid_t pid;
+ char * prog; /* program instantiated */
+ struct list_head names; /* names for which process accepts flows */
+ struct shm_flow_set * set;
- struct reg_entry * re; /* reg_entry for which a flow arrived */
+ struct reg_entry * re; /* reg_entry for which a flow arrived */
/* The process will block on this */
- enum proc_state state;
- pthread_cond_t cond;
- pthread_mutex_t lock;
+ enum proc_state state;
+ pthread_cond_t cond;
+ pthread_mutex_t lock;
};
struct proc_entry * proc_entry_create(pid_t proc,