MinGW
[oweals/gnunet.git] / src / util / server.c
index bf4eb45184da4b0c7a25969dca08e98bf0363bae..1353d4c057c1412f9aee218aa49f732d3b1f90e1 100644 (file)
@@ -937,7 +937,7 @@ sock_check (void *cls)
 static void
 sock_destroy (void *cls)
 {
-  GNUNET_CONNECTION_destroy (cls);
+  GNUNET_CONNECTION_destroy (cls, GNUNET_NO);
 }
 
 
@@ -1186,24 +1186,22 @@ GNUNET_SERVER_client_disconnect (struct GNUNET_SERVER_Client *client)
         server->clients = pos->next;
       else
         prev->next = pos->next;
+      if (client->restart_task != GNUNET_SCHEDULER_NO_TASK)
+       GNUNET_SCHEDULER_cancel (server->sched,
+                                client->restart_task);
       n = server->disconnect_notify_list;
       while (n != NULL)
         {
           n->callback (n->callback_cls, client);
           n = n->next;
         }
-      if (client->restart_task != GNUNET_SCHEDULER_NO_TASK)
-       GNUNET_SCHEDULER_cancel (client->server->sched,
-                                client->restart_task);
     }
   if (rc > 0)
     return;
-  if (client->in_process_client_buffer)
+  if (client->in_process_client_buffer == GNUNET_YES)
     return;
   client->destroy (client->client_closure);
-  GNUNET_free (client);
-
-  
+  GNUNET_free (client);  
 }
 
 
@@ -1276,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);