diff options
| -rw-r--r-- | src/ipcpd/local/main.c | 12 | ||||
| -rw-r--r-- | src/irmd/main.c | 11 | 
2 files changed, 15 insertions, 8 deletions
diff --git a/src/ipcpd/local/main.c b/src/ipcpd/local/main.c index 5a53dec5..da84e517 100644 --- a/src/ipcpd/local/main.c +++ b/src/ipcpd/local/main.c @@ -224,12 +224,14 @@ static int local_ipcp_flow_alloc_resp(int              fd,          int    out_fd;          time_t mpl = IPCP_LOCAL_MPL; -        if (ipcp_wait_flow_resp(fd) < 0) +        if (ipcp_wait_flow_resp(fd) < 0) { +                log_err("Failed waiting for IRMd response.");                  return -1; +        }          pthread_rwlock_wrlock(&local_data.lock); -        if (response) { +        if (response < 0) {                  if (local_data.in_out[fd] != -1)                          local_data.in_out[local_data.in_out[fd]] = fd;                  local_data.in_out[fd] = -1; @@ -240,6 +242,7 @@ static int local_ipcp_flow_alloc_resp(int              fd,          out_fd = local_data.in_out[fd];          if (out_fd == -1) {                  pthread_rwlock_unlock(&local_data.lock); +                log_err("Invalid out_fd.");                  return -1;          } @@ -247,8 +250,11 @@ static int local_ipcp_flow_alloc_resp(int              fd,          fset_add(local_data.flows, fd); -        if (ipcp_flow_alloc_reply(out_fd, response, mpl, data) < 0) +        if (ipcp_flow_alloc_reply(out_fd, response, mpl, data) < 0) { +                log_err("Failed to reply to allocation"); +                fset_del(local_data.flows, fd);                  return -1; +        }          log_info("Flow allocation completed, fds (%d, %d).", out_fd, fd); diff --git a/src/irmd/main.c b/src/irmd/main.c index e2503d0c..ecdc2fb9 100644 --- a/src/irmd/main.c +++ b/src/irmd/main.c @@ -1233,17 +1233,17 @@ static int flow_alloc_reply(struct flow_info * flow,  static int flow_dealloc(struct flow_info * flow,                          struct timespec *  ts)  { -        log_info("Deallocating flow %d for process %d.", -                 flow->id, flow->n_pid); +        log_info("Deallocating flow %d for process %d (timeout: %zd s).", +                 flow->id, flow->n_pid, ts->tv_sec);          reg_dealloc_flow(flow); -         if (ipcp_flow_dealloc(flow->n_1_pid, flow->id, ts->tv_sec) < 0) { +        if (ipcp_flow_dealloc(flow->n_1_pid, flow->id, ts->tv_sec) < 0) {                  log_err("Failed to request dealloc from %d.", flow->n_1_pid);                  return -EIPCP; -         } +        } -         return 0; +        return 0;  }  static int flow_dealloc_resp(struct flow_info * flow) @@ -1462,6 +1462,7 @@ static irm_msg_t * do_command_msg(irm_msg_t * msg)                  break;          case IRM_MSG_CODE__IRM_FLOW_DEALLOC:                  flow = flow_info_msg_to_s(msg->flow_info); +                ts = timespec_msg_to_s(msg->timeo);                  res = flow_dealloc(&flow, &ts);                  break;          case IRM_MSG_CODE__IPCP_FLOW_DEALLOC:  | 
