Remove unnecessary extra tracking of eloop registration

It is fine to try to cancel a registration that does not exist, so there
is no need to have the duplicated checks for eloop timeout and socket
registration.

Signed-hostap: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2013-12-28 17:00:08 +02:00
parent c86bf160a7
commit c89d9dba9c

View file

@ -67,8 +67,6 @@ struct httpread {
int timeout_seconds; /* 0 or total duration timeout period */ int timeout_seconds; /* 0 or total duration timeout period */
/* dynamically used information follows */ /* dynamically used information follows */
int sd_registered; /* nonzero if we need to unregister socket */
int to_registered; /* nonzero if we need to unregister timeout */
int got_hdr; /* nonzero when header is finalized */ int got_hdr; /* nonzero when header is finalized */
char hdr[HTTPREAD_HEADER_MAX_SIZE+1]; /* headers stored here */ char hdr[HTTPREAD_HEADER_MAX_SIZE+1]; /* headers stored here */
@ -143,12 +141,8 @@ void httpread_destroy(struct httpread *h)
if (!h) if (!h)
return; return;
if (h->to_registered)
eloop_cancel_timeout(httpread_timeout_handler, NULL, h); eloop_cancel_timeout(httpread_timeout_handler, NULL, h);
h->to_registered = 0;
if (h->sd_registered)
eloop_unregister_sock(h->sd, EVENT_TYPE_READ); eloop_unregister_sock(h->sd, EVENT_TYPE_READ);
h->sd_registered = 0;
os_free(h->body); os_free(h->body);
os_free(h->uri); os_free(h->uri);
os_memset(h, 0, sizeof(*h)); /* aid debugging */ os_memset(h, 0, sizeof(*h)); /* aid debugging */
@ -163,7 +157,6 @@ static void httpread_timeout_handler(void *eloop_data, void *user_ctx)
{ {
struct httpread *h = user_ctx; struct httpread *h = user_ctx;
wpa_printf(MSG_DEBUG, "httpread timeout (%p)", h); wpa_printf(MSG_DEBUG, "httpread timeout (%p)", h);
h->to_registered = 0; /* is self-cancelling */
(*h->cb)(h, h->cookie, HTTPREAD_EVENT_TIMEOUT); (*h->cb)(h, h->cookie, HTTPREAD_EVENT_TIMEOUT);
} }
@ -689,15 +682,11 @@ got_file:
* and just in case somehow we don't get destroyed right away, * and just in case somehow we don't get destroyed right away,
* unregister now. * unregister now.
*/ */
if (h->sd_registered)
eloop_unregister_sock(h->sd, EVENT_TYPE_READ); eloop_unregister_sock(h->sd, EVENT_TYPE_READ);
h->sd_registered = 0;
/* The application can destroy us whenever they feel like... /* The application can destroy us whenever they feel like...
* cancel timeout. * cancel timeout.
*/ */
if (h->to_registered)
eloop_cancel_timeout(httpread_timeout_handler, NULL, h); eloop_cancel_timeout(httpread_timeout_handler, NULL, h);
h->to_registered = 0;
(*h->cb)(h, h->cookie, HTTPREAD_EVENT_FILE_READY); (*h->cb)(h, h->cookie, HTTPREAD_EVENT_FILE_READY);
} }
@ -735,21 +724,17 @@ struct httpread * httpread_create(
h->max_bytes = max_bytes; h->max_bytes = max_bytes;
h->timeout_seconds = timeout_seconds; h->timeout_seconds = timeout_seconds;
if (timeout_seconds > 0) { if (timeout_seconds > 0 &&
if (eloop_register_timeout(timeout_seconds, 0, eloop_register_timeout(timeout_seconds, 0,
httpread_timeout_handler, httpread_timeout_handler, NULL, h)) {
NULL, h)) {
/* No way to recover (from malloc failure) */ /* No way to recover (from malloc failure) */
goto fail; goto fail;
} }
h->to_registered = 1;
}
if (eloop_register_sock(sd, EVENT_TYPE_READ, httpread_read_handler, if (eloop_register_sock(sd, EVENT_TYPE_READ, httpread_read_handler,
NULL, h)) { NULL, h)) {
/* No way to recover (from malloc failure) */ /* No way to recover (from malloc failure) */
goto fail; goto fail;
} }
h->sd_registered = 1;
return h; return h;
fail: fail: