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

Reply via email to