Fix bug in mapperd.
authorFilippos Giannakos <philipgian@grnet.gr>
Fri, 19 Apr 2013 08:48:58 +0000 (11:48 +0300)
committerFilippos Giannakos <philipgian@grnet.gr>
Fri, 19 Apr 2013 08:48:58 +0000 (11:48 +0300)
When signaling map, use signal_broadcast to wake up all waiters instead of just
one, to avoid missing signals when cached is dropped for the map.

xseg/peers/user/mt-mapperd.c

index 2b4c95c..bb22141 100644 (file)
@@ -175,11 +175,11 @@ struct map_node {
 #define signal_map(__map)                      \
        do {                                    \
                if (__map->waiters) {           \
-                       ta += 1;                \
+                       ta += __map->waiters;           \
                        XSEGLOG2(&lc, D, "Signaling map %lx %s, waiters: %u, \
                        ta: %u",  __map, __map->volume, __map->waiters, ta); \
-                       __map->waiters--;       \
-                       st_cond_signal(__map->cond);    \
+                       __map->waiters = 0;     \
+                       st_cond_broadcast(__map->cond); \
                }                               \
        }while(0)