handle being already disconnected
authorChristian Grothoff <christian@grothoff.org>
Fri, 12 Mar 2010 15:05:05 +0000 (15:05 +0000)
committerChristian Grothoff <christian@grothoff.org>
Fri, 12 Mar 2010 15:05:05 +0000 (15:05 +0000)
src/util/connection.c
src/util/scheduler.c
src/util/server.c

index c572d02de71427d09a8c089555dec50bd9aac814..10f53dcf9fe6d63a1139a212bf8510d37b88e380 100644 (file)
@@ -1538,8 +1538,11 @@ GNUNET_CONNECTION_notify_transmit_ready_cancel (struct
     }
   else
     {
-      GNUNET_SCHEDULER_cancel (h->sh->sched, h->sh->write_task);
-      h->sh->write_task = GNUNET_SCHEDULER_NO_TASK;
+      if (h->sh->write_task != GNUNET_SCHEDULER_NO_TASK)
+       {
+         GNUNET_SCHEDULER_cancel (h->sh->sched, h->sh->write_task);
+         h->sh->write_task = GNUNET_SCHEDULER_NO_TASK;
+       }
     }
   h->notify_ready = NULL;
 }
index 7b6f86c9e894b74962c449ef6162d56d27f8e4ef..d9b1822440e3eb852226177fcce248c22ab3d417 100644 (file)
@@ -30,7 +30,8 @@
 #include "gnunet_time_lib.h"
 #ifdef LINUX
 #include "execinfo.h"
-#define EXECINFO GNUNET_NO
+#define EXECINFO GNUNET_YES
+#define MAX_TRACE_DEPTH 50
 #endif
 
 #define DEBUG_TASKS GNUNET_NO
@@ -1095,13 +1096,13 @@ GNUNET_SCHEDULER_add_select (struct GNUNET_SCHEDULER_Handle * sched,
 {
   struct Task *t;
 #if EXECINFO
-  void *backtrace_array[50];
+  void *backtrace_array[MAX_TRACE_DEPTH];
 #endif
   t = GNUNET_malloc (sizeof (struct Task));
   t->callback = task;
   t->callback_cls = task_cls;
 #if EXECINFO
-  t->num_backtrace_strings = backtrace(backtrace_array, 50);
+  t->num_backtrace_strings = backtrace(backtrace_array, MAX_TRACE_DEPTH);
   t->backtrace_strings = backtrace_symbols(backtrace_array, t->num_backtrace_strings);
 #endif
   if (rs != NULL)
index 5fda7ae818567cd83e55500e3526259e9ca98668..b3c03d71089c5c012dcb1b984c2762896631722b 100644 (file)
@@ -1274,6 +1274,11 @@ GNUNET_SERVER_receive_done (struct GNUNET_SERVER_Client *client, int success)
       GNUNET_free (sb);
       return;
     }
+  if (client->server == NULL)
+    {
+      GNUNET_SERVER_client_disconnect (client);
+      return;
+    }
   client->restart_task = GNUNET_SCHEDULER_add_now (client->server->sched,
                                                   &restart_processing,
                                                   client);