From: Linus Nordberg Date: Mon, 18 Nov 2013 15:34:21 +0000 (+0100) Subject: Stop rs_request_send() from leaking RSE_TIMEOUT_CONN and RSE_TIMEOUT_IO. X-Git-Tag: libradsec-0.0.4~5 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=radsecproxy.git;a=commitdiff_plain;h=1f84470aaf49264084d39078adb4afd26d0b4d71 Stop rs_request_send() from leaking RSE_TIMEOUT_CONN and RSE_TIMEOUT_IO. 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. --- diff --git a/lib/request.c b/lib/request.c index 3a8b6dd..40ac56d 100644 --- a/lib/request.c +++ b/lib/request.c @@ -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. */ }