Hi Phil, the C++ extern change is made. I also asserted activeq in event.c. The tailq related changes are unnecessary. If Coverity flagged them then they are false positives.
Thanks for the patches, Niels. On 1/25/07, Phil Oleson <[EMAIL PROTECTED]> wrote:
Index: evdns.h =================================================================== --- evdns.h (revision 312) +++ evdns.h (working copy) @@ -237,6 +237,10 @@ #ifndef EVENTDNS_H #define EVENTDNS_H +#ifdef __cplusplus +extern "C" { +#endif + /* Error codes 0-5 are as described in RFC 1035. */ #define DNS_ERR_NONE 0 /* The name server was unable to interpret the query */ @@ -303,4 +307,8 @@ #define DNS_NO_SEARCH 1 +#ifdef __cplusplus +} +#endif + #endif // !EVENTDNS_H Index: event.c =================================================================== --- event.c (revision 312) +++ event.c (working copy) @@ -301,6 +301,8 @@ } } + if (!activeq) return; + for (ev = TAILQ_FIRST(activeq); ev; ev = TAILQ_FIRST(activeq)) { event_queue_remove(base, ev, EVLIST_ACTIVE); Index: evrpc.c =================================================================== --- evrpc.c (revision 312) +++ evrpc.c (working copy) @@ -260,19 +260,25 @@ void evrpc_pool_free(struct evrpc_pool *pool) { - struct evhttp_connection *connection; - struct evrpc_request_wrapper *request; + struct evhttp_connection *connection, *conn_next; + struct evrpc_request_wrapper *request, *req_next; - while ((request = TAILQ_FIRST(&pool->requests)) != NULL) { - TAILQ_REMOVE(&pool->requests, request, next); + request = TAILQ_FIRST(&pool->requests); + while (request != NULL) { + req_next = TAILQ_NEXT(request, next); /* if this gets more complicated we need our own function */ evrpc_request_wrapper_free(request); + request = req_next; } + TAILQ_INIT(&pool->requests); - while ((connection = TAILQ_FIRST(&pool->connections)) != NULL) { - TAILQ_REMOVE(&pool->connections, connection, next); + connection = TAILQ_FIRST(&pool->connections); + while (connection != NULL) { + conn_next = TAILQ_NEXT(connection, next); evhttp_connection_free(connection); + connection = conn_next; } + TAILQ_INIT(&pool->connections); free(pool); } Index: http.c =================================================================== --- http.c (revision 312) +++ http.c (working copy) @@ -715,7 +715,7 @@ void evhttp_connection_free(struct evhttp_connection *evcon) { - struct evhttp_request *req; + struct evhttp_request *req, *next_req; /* notify interested parties that this connection is going down */ if (evcon->fd != -1) { @@ -724,10 +724,13 @@ } /* remove all requests that might be queued on this connection */ - while ((req = TAILQ_FIRST(&evcon->requests)) != NULL) { - TAILQ_REMOVE(&evcon->requests, req, next); + req = TAILQ_FIRST(&evcon->requests); + while (req != NULL) { + next_req = TAILQ_NEXT(req, next); evhttp_request_free(req); + req = next_req; } + TAILQ_INIT(&evcon->requests); if (evcon->http_server != NULL) { struct evhttp *http = evcon->http_server; @@ -1021,16 +1024,17 @@ void evhttp_clear_headers(struct evkeyvalq *headers) { - struct evkeyval *header; + struct evkeyval *header, *next_head; - for (header = TAILQ_FIRST(headers); - header != NULL; - header = TAILQ_FIRST(headers)) { - TAILQ_REMOVE(headers, header, next); + header = TAILQ_FIRST(headers); + while (header != NULL) { + next_head = TAILQ_NEXT(header, next); free(header->key); free(header->value); free(header); + header = next_head; } + TAILQ_INIT(headers); } /* @@ -1863,25 +1867,30 @@ void evhttp_free(struct evhttp* http) { - struct evhttp_cb *http_cb; - struct evhttp_connection *evcon; + struct evhttp_cb *http_cb, *cb_next; + struct evhttp_connection *evcon, *evcon_next; int fd = http->bind_ev.ev_fd; /* Remove the accepting part */ event_del(&http->bind_ev); close(fd); - while ((evcon = TAILQ_FIRST(&http->connections)) != NULL) { - /* evhttp_connection_free removes the connection */ - evhttp_connection_free(evcon); + evcon = TAILQ_FIRST(&http->connections); + while (evcon != NULL) { + evcon_next = TAILQ_NEXT(evcon, next); + evhttp_connection_free(evcon); /* removes the connection */ + evcon = evcon_next; } - while ((http_cb = TAILQ_FIRST(&http->callbacks)) != NULL) { - TAILQ_REMOVE(&http->callbacks, http_cb, next); + http_cb = TAILQ_FIRST(&http->callbacks); + while (http_cb != NULL) { + cb_next = TAILQ_NEXT(http_cb, next); free(http_cb->what); free(http_cb); + http_cb = cb_next; } - + TAILQ_INIT(&http->callbacks); + free(http); } _______________________________________________ Libevent-users mailing list Libevent-users@monkey.org http://monkey.org/mailman/listinfo/libevent-users
_______________________________________________ Libevent-users mailing list Libevent-users@monkey.org http://monkey.org/mailman/listinfo/libevent-users