diff options
author | Dimitri Staessens <[email protected]> | 2024-02-23 09:29:47 +0100 |
---|---|---|
committer | Sander Vrijders <[email protected]> | 2024-02-23 16:41:37 +0100 |
commit | e6c2d4c9c6b8b12bbcf7bc8bd494b3ba56133e1f (patch) | |
tree | ad959d95f8fb1f6d4744c57c9027bf182bc3190b /src/irmd/ipcp.c | |
parent | dcefa07624926da23a559eedc3f7361ac36e8312 (diff) | |
download | ouroboros-e6c2d4c9c6b8b12bbcf7bc8bd494b3ba56133e1f.tar.gz ouroboros-e6c2d4c9c6b8b12bbcf7bc8bd494b3ba56133e1f.zip |
lib: Revise app flow allocation
This revises the application flow allocator to use the flow_info
struct/message between the components. Revises the messaging to move
the use protocol buffers to its own source (serdes-irm).
Adds a timeout to the IRMd flow allocator to make sure flow
allocations don't hang forever (this was previously taken care of by
the sanitize thread).
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
Diffstat (limited to 'src/irmd/ipcp.c')
-rw-r--r-- | src/irmd/ipcp.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/irmd/ipcp.c b/src/irmd/ipcp.c index 3253a8f3..c8055aa1 100644 --- a/src/irmd/ipcp.c +++ b/src/irmd/ipcp.c @@ -58,6 +58,7 @@ ipcp_msg_t * send_recv_ipcp_msg(pid_t pid, struct timeval tv; struct timespec tic; struct timespec toc; + bool dealloc = false; if (kill(pid, 0) < 0) return NULL; @@ -101,6 +102,15 @@ ipcp_msg_t * send_recv_ipcp_msg(pid_t pid, tv.tv_sec = CONNECT_TIMEOUT / 1000; tv.tv_usec = (CONNECT_TIMEOUT % 1000) * 1000; break; + case IPCP_MSG_CODE__IPCP_FLOW_ALLOC: + tv.tv_sec = FLOW_ALLOC_TIMEOUT / 1000; + tv.tv_usec = (FLOW_ALLOC_TIMEOUT % 1000) * 1000; + break; + case IPCP_MSG_CODE__IPCP_FLOW_DEALLOC: + dealloc = true; + tv.tv_sec = 0; /* FIX DEALLOC: don't wait for dealloc */ + tv.tv_usec = 500; + break; default: tv.tv_sec = SOCKET_TIMEOUT / 1000; tv.tv_usec = (SOCKET_TIMEOUT % 1000) * 1000; @@ -127,7 +137,7 @@ ipcp_msg_t * send_recv_ipcp_msg(pid_t pid, if (len > 0) recv_msg = ipcp_msg__unpack(NULL, len, buf); else { - if (errno == EAGAIN) { + if (errno == EAGAIN && !dealloc) { int diff = ts_diff_ms(&tic, &toc); log_warn("IPCP command timed out after %d ms.", diff); } |