gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r18127 - gnunet/src/transport


From: gnunet
Subject: [GNUnet-SVN] r18127 - gnunet/src/transport
Date: Mon, 14 Nov 2011 13:05:56 +0100

Author: wachs
Date: 2011-11-14 13:05:56 +0100 (Mon, 14 Nov 2011)
New Revision: 18127

Modified:
   gnunet/src/transport/plugin_transport_http.c
   gnunet/src/transport/plugin_transport_http_server.c
Log:
fixing memory leak #1895


Modified: gnunet/src/transport/plugin_transport_http.c
===================================================================
--- gnunet/src/transport/plugin_transport_http.c        2011-11-14 01:49:59 UTC 
(rev 18126)
+++ gnunet/src/transport/plugin_transport_http.c        2011-11-14 12:05:56 UTC 
(rev 18127)
@@ -585,22 +585,25 @@
   {
 #if DEBUG_HTTP
     GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name,
-                     "Using outbound client session to send to `%s'\n",
+                     "Using outbound client session %p to send to `%s'\n",
+                     s,
                      GNUNET_i2s (target));
 #endif
+
     client_send (s, msg);
     res = msgbuf_size;
   }
   if (s->inbound == GNUNET_YES)
   {
-    server_send (s, msg);
-    res = msgbuf_size;
 #if DEBUG_HTTP
     GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name,
-                     "Using inbound server session to send to `%s'\n",
+                     "Using inbound server %p session to send to `%s'\n",
+                     s,
                      GNUNET_i2s (target));
 #endif
 
+    server_send (s, msg);
+    res = msgbuf_size;
   }
   return res;
 }
@@ -634,6 +637,22 @@
       else
         GNUNET_assert (GNUNET_OK == server_disconnect (s));
       GNUNET_CONTAINER_DLL_remove (plugin->head, plugin->tail, s);
+
+      struct HTTP_Message * msg = s->msg_head;
+      struct HTTP_Message * tmp = s->msg_head;
+      while (msg != NULL)
+      {
+        tmp = msg->next;
+
+        GNUNET_CONTAINER_DLL_remove(s->msg_head,s->msg_tail, msg);
+        if (msg->transmit_cont != NULL)
+        {
+          msg->transmit_cont(msg->transmit_cont_cls, target, GNUNET_SYSERR);
+        }
+        GNUNET_free (msg);
+        msg = tmp;
+      }
+
       delete_session (s);
     }
     s = next;
@@ -1387,8 +1406,23 @@
   while (s != NULL)
   {
     struct Session *t = s->next;
+    GNUNET_CONTAINER_DLL_remove (plugin->head, plugin->tail, s);
 
-    GNUNET_CONTAINER_DLL_remove (plugin->head, plugin->tail, s);
+    struct HTTP_Message * msg = s->msg_head;
+    struct HTTP_Message * tmp = s->msg_head;
+    while (msg != NULL)
+    {
+      tmp = msg->next;
+
+      GNUNET_CONTAINER_DLL_remove(s->msg_head,s->msg_tail, msg);
+      if (msg->transmit_cont != NULL)
+      {
+        msg->transmit_cont(msg->transmit_cont_cls, &s->target, GNUNET_SYSERR);
+      }
+      GNUNET_free (msg);
+      msg = tmp;
+    }
+
     delete_session (s);
     s = t;
   }

Modified: gnunet/src/transport/plugin_transport_http_server.c
===================================================================
--- gnunet/src/transport/plugin_transport_http_server.c 2011-11-14 01:49:59 UTC 
(rev 18126)
+++ gnunet/src/transport/plugin_transport_http_server.c 2011-11-14 12:05:56 UTC 
(rev 18127)
@@ -311,7 +311,10 @@
 server_send_callback (void *cls, uint64_t pos, char *buf, size_t max)
 {
   struct Session *s = cls;
-
+#if VERBOSE_SERVER
+  GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, s->plugin->name,
+                   "Server: %X can sent maximum  %u \n", s, max);
+#endif
   struct HTTP_Message *msg;
   int bytes_read = 0;
 
@@ -345,8 +348,7 @@
 
 #if VERBOSE_CLIENT
   struct Plugin *plugin = s->plugin;
-
-  GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name,
+  GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, plugin->name,
                    "Server: %X: sent %u bytes\n", s, bytes_read);
 #endif
   return bytes_read;
@@ -852,8 +854,6 @@
     }
     t = t->next;
   }
-
-
   return GNUNET_OK;
 }
 
@@ -884,7 +884,10 @@
 
   if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
     return;
-
+#if VERBOSE_SERVER
+  GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, plugin->name,
+                       "Running IPv6 server\n");
+#endif
   GNUNET_assert (MHD_YES == MHD_run (plugin->server_v4));
   if (plugin->server_v4 != NULL)
     plugin->server_v4_task =
@@ -909,7 +912,10 @@
 
   if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
     return;
-
+#if VERBOSE_SERVER
+  GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, plugin->name,
+                       "Running IPv6 server\n");
+#endif
   GNUNET_assert (MHD_YES == MHD_run (plugin->server_v6));
   if (plugin->server_v6 != NULL)
     plugin->server_v6_task =
@@ -972,6 +978,7 @@
   GNUNET_NETWORK_fdset_copy_native (wrs, &rs, max + 1);
   GNUNET_NETWORK_fdset_copy_native (wws, &ws, max + 1);
   GNUNET_NETWORK_fdset_copy_native (wes, &es, max + 1);
+
   if (daemon_handle == plugin->server_v4)
   {
     if (plugin->server_v4_task != GNUNET_SCHEDULER_NO_TASK)
@@ -979,7 +986,10 @@
       GNUNET_SCHEDULER_cancel (plugin->server_v4_task);
       plugin->server_v4_task = GNUNET_SCHEDULER_NO_TASK;
     }
-
+#if VERBOSE_SERVER
+  GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, plugin->name,
+                       "Scheduling IPv4 server task in %llu ms\n", tv);
+#endif
     ret =
         GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT,
                                      GNUNET_SCHEDULER_NO_TASK, tv, wrs, wws,
@@ -992,7 +1002,10 @@
       GNUNET_SCHEDULER_cancel (plugin->server_v6_task);
       plugin->server_v6_task = GNUNET_SCHEDULER_NO_TASK;
     }
-
+#if VERBOSE_SERVER
+  GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, plugin->name,
+                       "Scheduling IPv6 server task in %llu ms\n", tv);
+#endif
     ret =
         GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT,
                                      GNUNET_SCHEDULER_NO_TASK, tv, wrs, wws,
@@ -1139,6 +1152,11 @@
   struct Session *s = NULL;
   struct Session *t = NULL;
 
+#if VERBOSE_SERVER
+  GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, plugin->name,
+                   "server_stop\n");
+#endif
+
   struct MHD_Daemon *server_v4_tmp = plugin->server_v4;
 
   plugin->server_v4 = NULL;
@@ -1171,7 +1189,26 @@
   s = plugin->server_semi_head;
   while (s != NULL)
   {
+#if VERBOSE_SERVER
+    GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, plugin->name,
+                     "Deleting semi-sessions %p\n", s);
+#endif
     t = s->next;
+    struct HTTP_Message * msg = s->msg_head;
+    struct HTTP_Message * tmp = s->msg_head;
+    while (msg != NULL)
+    {
+      tmp = msg->next;
+
+      GNUNET_CONTAINER_DLL_remove(s->msg_head,s->msg_tail, msg);
+      if (msg->transmit_cont != NULL)
+      {
+        msg->transmit_cont(msg->transmit_cont_cls, &s->target, GNUNET_SYSERR);
+      }
+      GNUNET_free (msg);
+      msg = tmp;
+    }
+
     delete_session (s);
     s = t;
   }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]