diff options
author | Dimitri Staessens <dimitri.staessens@ugent.be> | 2017-08-03 11:09:58 -0600 |
---|---|---|
committer | Dimitri Staessens <dimitri.staessens@ugent.be> | 2017-08-03 11:09:58 -0600 |
commit | 6eb3105f908158130bbc415e7376e3c2d7aafb5e (patch) | |
tree | c758cb4008d7d81173fca556ae8a2fd210b295ec /src/ipcpd/local/main.c | |
parent | b92eac2e9f6d686a9e2f748f8097aedbb373395c (diff) | |
parent | e3d19da0501bbb80ba1caf562ba61a99c63b10b7 (diff) | |
download | ouroboros-6eb3105f908158130bbc415e7376e3c2d7aafb5e.tar.gz ouroboros-6eb3105f908158130bbc415e7376e3c2d7aafb5e.zip |
Merge remote-tracking branch 'origin/testing-deadlines' into be
Diffstat (limited to 'src/ipcpd/local/main.c')
-rw-r--r-- | src/ipcpd/local/main.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/ipcpd/local/main.c b/src/ipcpd/local/main.c index ddb5e4ec..78224fbd 100644 --- a/src/ipcpd/local/main.c +++ b/src/ipcpd/local/main.c @@ -177,18 +177,23 @@ static int ipcp_local_flow_alloc(int fd, qoscube_t cube) { struct timespec ts = {0, EVENT_WAIT_TIMEOUT * 1000}; + struct timespec abstime; int out_fd = -1; log_dbg("Allocating flow to " HASH_FMT " on fd %d.", HASH_VAL(dst), fd); assert(dst); + clock_gettime(PTHREAD_COND_CLOCK, &abstime); + pthread_mutex_lock(&ipcpi.alloc_lock); - while (ipcpi.alloc_id != -1 && ipcp_get_state() == IPCP_OPERATIONAL) + while (ipcpi.alloc_id != -1 && ipcp_get_state() == IPCP_OPERATIONAL) { + ts_add(&abstime, &ts, &abstime); pthread_cond_timedwait(&ipcpi.alloc_cond, &ipcpi.alloc_lock, - &ts); + &abstime); + } if (ipcp_get_state() != IPCP_OPERATIONAL) { log_dbg("Won't allocate over non-operational IPCP."); @@ -228,15 +233,20 @@ static int ipcp_local_flow_alloc_resp(int fd, int response) { struct timespec ts = {0, EVENT_WAIT_TIMEOUT * 1000}; + struct timespec abstime; int out_fd = -1; int ret = -1; + clock_gettime(PTHREAD_COND_CLOCK, &abstime); + pthread_mutex_lock(&ipcpi.alloc_lock); - while (ipcpi.alloc_id != fd && ipcp_get_state() == IPCP_OPERATIONAL) + while (ipcpi.alloc_id != fd && ipcp_get_state() == IPCP_OPERATIONAL) { + ts_add(&abstime, &ts, &abstime); pthread_cond_timedwait(&ipcpi.alloc_cond, &ipcpi.alloc_lock, - &ts); + &abstime); + } if (ipcp_get_state() != IPCP_OPERATIONAL) { pthread_mutex_unlock(&ipcpi.alloc_lock); |