summaryrefslogtreecommitdiff
path: root/src/ipcpd/ipcp.c
diff options
context:
space:
mode:
authorSander Vrijders <[email protected]>2016-08-11 17:39:39 +0200
committerSander Vrijders <[email protected]>2016-08-11 17:39:39 +0200
commit5432e665fd6eac776c5985d98058e5c4645ec0e4 (patch)
tree10b398bf23356751a961c332a9dff053c6927f24 /src/ipcpd/ipcp.c
parentcf30e07cf862b117013e8c7fa2fb5c2ac8fef245 (diff)
downloadouroboros-5432e665fd6eac776c5985d98058e5c4645ec0e4.tar.gz
ouroboros-5432e665fd6eac776c5985d98058e5c4645ec0e4.zip
ipcpd: Add condition variable to IPCP state
This adds a condition variable to the IPCP state, so that upon state changes any listeners to state changes can be notified. It also replaces the read/write lock with a mutex in order to be able to do so.
Diffstat (limited to 'src/ipcpd/ipcp.c')
-rw-r--r--src/ipcpd/ipcp.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/ipcpd/ipcp.c b/src/ipcpd/ipcp.c
index 24f580e5..5c066cb0 100644
--- a/src/ipcpd/ipcp.c
+++ b/src/ipcpd/ipcp.c
@@ -42,11 +42,22 @@ struct ipcp * ipcp_instance_create()
i->irmd_fd = -1;
i->state = IPCP_INIT;
- pthread_rwlock_init(&i->state_lock, NULL);
+ pthread_mutex_init(&i->state_lock, NULL);
+ pthread_cond_init(&i->state_cond, NULL);
return i;
}
+void ipcp_state_change(struct ipcp * ipcp,
+ enum ipcp_state state)
+{
+ if (ipcp == NULL)
+ return;
+
+ ipcp->state = state;
+ pthread_cond_broadcast(&ipcp->state_cond);
+}
+
int ipcp_parse_arg(int argc, char * argv[])
{
char * log_file;