summaryrefslogtreecommitdiff
path: root/src/ipcpd/local
diff options
context:
space:
mode:
authordimitri staessens <[email protected]>2017-09-21 15:05:13 +0000
committerSander Vrijders <[email protected]>2017-09-21 15:05:13 +0000
commit6ef3b4767b60c9fd7482bf4aa9b9271131e24053 (patch)
tree576c10d7c990add69888c9b812b212637c7f6f39 /src/ipcpd/local
parente2d3b18ab787ebe090cd958cc63be655be86f42c (diff)
parent74364d19237e80081d1c6a76b46d787527638fcb (diff)
downloadouroboros-6ef3b4767b60c9fd7482bf4aa9b9271131e24053.tar.gz
ouroboros-6ef3b4767b60c9fd7482bf4aa9b9271131e24053.zip
Merged in dstaesse/ouroboros/be-cancel (pull request #609)
ipcpd: Cancel threads in IPCPs
Diffstat (limited to 'src/ipcpd/local')
-rw-r--r--src/ipcpd/local/main.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/ipcpd/local/main.c b/src/ipcpd/local/main.c
index 7f44a2c6..b98e144c 100644
--- a/src/ipcpd/local/main.c
+++ b/src/ipcpd/local/main.c
@@ -44,8 +44,8 @@
#include <sys/wait.h>
#include <assert.h>
-#define EVENT_WAIT_TIMEOUT 100 /* us */
-#define THIS_TYPE IPCP_LOCAL
+#define THIS_TYPE IPCP_LOCAL
+#define ALLOC_TIMEOUT 10 /* ms */
struct {
struct shim_data * shim_data;
@@ -95,15 +95,13 @@ static void local_data_fini(void){
static void * ipcp_local_sdu_loop(void * o)
{
- struct timespec timeout = {0, EVENT_WAIT_TIMEOUT * 1000};
-
(void) o;
- while (ipcp_get_state() == IPCP_OPERATIONAL) {
+ while (true) {
int fd;
ssize_t idx;
- fevent(local_data.flows, local_data.fq, &timeout);
+ fevent(local_data.flows, local_data.fq, NULL);
while ((fd = fqueue_next(local_data.fq)) >= 0) {
idx = local_flow_read(fd);
@@ -181,7 +179,7 @@ static int ipcp_local_flow_alloc(int fd,
const uint8_t * dst,
qoscube_t cube)
{
- struct timespec ts = {0, EVENT_WAIT_TIMEOUT * 1000};
+ struct timespec ts = {0, ALLOC_TIMEOUT * MILLION};
struct timespec abstime;
int out_fd = -1;
@@ -237,7 +235,7 @@ static int ipcp_local_flow_alloc(int fd,
static int ipcp_local_flow_alloc_resp(int fd,
int response)
{
- struct timespec ts = {0, EVENT_WAIT_TIMEOUT * 1000};
+ struct timespec ts = {0, ALLOC_TIMEOUT * MILLION};
struct timespec abstime;
int out_fd = -1;
int ret = -1;
@@ -359,8 +357,10 @@ int main(int argc,
ipcp_shutdown();
- if (ipcp_get_state() == IPCP_SHUTDOWN)
+ if (ipcp_get_state() == IPCP_SHUTDOWN) {
+ pthread_cancel(local_data.sduloop);
pthread_join(local_data.sduloop, NULL);
+ }
local_data_fini();