[Top][All Lists]
[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;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r18127 - gnunet/src/transport,
gnunet <=