[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r25634 - gnunet/src/lockmanager
From: |
gnunet |
Subject: |
[GNUnet-SVN] r25634 - gnunet/src/lockmanager |
Date: |
Fri, 21 Dec 2012 17:29:06 +0100 |
Author: harsha
Date: 2012-12-21 17:29:06 +0100 (Fri, 21 Dec 2012)
New Revision: 25634
Modified:
gnunet/src/lockmanager/gnunet-service-lockmanager.c
Log:
remove disconnecting client from waitling lists of other locks
Modified: gnunet/src/lockmanager/gnunet-service-lockmanager.c
===================================================================
--- gnunet/src/lockmanager/gnunet-service-lockmanager.c 2012-12-21 16:24:29 UTC
(rev 25633)
+++ gnunet/src/lockmanager/gnunet-service-lockmanager.c 2012-12-21 16:29:06 UTC
(rev 25634)
@@ -595,7 +595,7 @@
{
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;
}
@@ -718,32 +718,6 @@
}
-static int
-stop_lock_attempt (void *cls,
- const struct GNUNET_HashCode *key,
- void *value)
-{
- struct ClientList *cl_entry = cls;
- struct Lock *lock = value;
- struct WaitList *wl;
- struct WaitList *next;
-
- next = lock->wl_head;
- while (NULL != (wl = next))
- {
- next = wl->next;
- if (wl->cl_entry == cl_entry)
- {
- GNUNET_CONTAINER_DLL_remove (lock->wl_head,
- lock->wl_tail,
- wl);
- GNUNET_free (wl);
- }
- }
- return GNUNET_OK;
-}
-
-
/**
* Callback for client disconnect
*
@@ -756,6 +730,7 @@
struct ClientList *cl_entry;
struct LockList *ll_entry;
struct Lock *lock;
+ struct WaitList *wl_entry;
if (NULL == client)
return;
@@ -768,11 +743,15 @@
{
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);
+ }
}
- GNUNET_CONTAINER_multihashmap_iterate (lock_map,
- &stop_lock_attempt,
- cl_entry);
cl_remove_client (cl_entry);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r25634 - gnunet/src/lockmanager,
gnunet <=