- verboser log, faster start
[oweals/gnunet.git] / src / lockmanager / gnunet-service-lockmanager.c
index 296dd00654ed87a019b78ab4b433521748954b02..e509fc68fd943b1e2093af07bf692c24bf2ab340 100644 (file)
@@ -595,7 +595,7 @@ handle_acquire (void *cls, struct GNUNET_SERVER_Client *client,
   {
     if (lock->cl_entry == cl_entry)
     {                           /* Client is requesting a lock it already owns */
-      GNUNET_break (0);
+      GNUNET_break_op (0);
       GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
       return;
     }
@@ -638,7 +638,6 @@ process_lock_release (struct Lock *lock)
   lock->cl_entry = wl_entry->cl_entry;
   lock_wl_remove (lock, wl_entry);
   send_success_msg (lock->cl_entry->client, lock->domain_name, lock->lock_num);
-  return;
 }
 
 
@@ -731,6 +730,7 @@ client_disconnect_cb (void *cls, struct GNUNET_SERVER_Client *client)
   struct ClientList *cl_entry;
   struct LockList *ll_entry;
   struct Lock *lock;
+  struct WaitList *wl_entry;
 
   if (NULL == client)
     return;
@@ -743,7 +743,14 @@ client_disconnect_cb (void *cls, struct GNUNET_SERVER_Client *client)
   {
     lock = ll_entry->lock;
     cl_ll_remove_lock (cl_entry, ll_entry);
-    process_lock_release (lock);
+    if (lock->cl_entry == cl_entry)
+      process_lock_release (lock);
+    else
+    {
+      wl_entry = lock_wl_find (lock, cl_entry);
+      GNUNET_assert (NULL != wl_entry);
+      lock_wl_remove (lock, wl_entry);
+    }
   }
   cl_remove_client (cl_entry);
 }
@@ -800,6 +807,7 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   GNUNET_CONTAINER_multihashmap_iterate (lock_map, &lock_delete_iterator, NULL);
   GNUNET_assert (0 == GNUNET_CONTAINER_multihashmap_size (lock_map));
   GNUNET_CONTAINER_multihashmap_destroy (lock_map);
+  lock_map = NULL;
 }
 
 
@@ -821,7 +829,7 @@ lockmanager_run (void *cls, struct GNUNET_SERVER_Handle *server,
   };
   GNUNET_SERVER_add_handlers (server, message_handlers);
   GNUNET_SERVER_disconnect_notify (server, &client_disconnect_cb, NULL);
-  lock_map = GNUNET_CONTAINER_multihashmap_create (30);
+  lock_map = GNUNET_CONTAINER_multihashmap_create (32, GNUNET_NO);
   GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
                                 NULL);
 }