Skip to content

Commit

Permalink
Stop rs_request_send() from leaking RSE_TIMEOUT_CONN and RSE_TIMEOUT_IO.
Browse files Browse the repository at this point in the history
If sending or receiving time out, pop the error off the stack before
continuing the loop. Push a new error, RS_TIMEOUT, before timing out
for real.

Addresses LIBRADSEC-3.
  • Loading branch information
Linus Nordberg committed Nov 18, 2013
1 parent d401ecb commit 1f84470
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions lib/request.c
Original file line number Diff line number Diff line change
Expand Up @@ -119,17 +119,19 @@ rs_request_send (struct rs_request *request, struct rs_packet **resp_msg)
resp_msg);
if (r == RSE_OK)
break; /* Success. */

if (r != RSE_TIMEOUT_CONN && r != RSE_TIMEOUT_IO)
break; /* Error. */
}
else if (r != RSE_TIMEOUT_CONN && r != RSE_TIMEOUT_IO)
if (r != RSE_TIMEOUT_CONN && r != RSE_TIMEOUT_IO)
break; /* Error. */

/* Timing out reading or writing. Pop the timeout error from the
stack and continue the loop. */
rs_err_conn_pop (request->conn);

gettimeofday (&now, NULL);
if (++count > MRC || timercmp (&now, &end, >))
{
r = RSE_TIMEOUT;
r = rs_err_conn_push_fl (request->conn, RSE_TIMEOUT,
__FILE__, __LINE__, NULL);
break; /* Timeout. */
}

Expand Down

0 comments on commit 1f84470

Please sign in to comment.