aboutsummaryrefslogtreecommitdiff
path: root/src/set
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-04-30 08:17:37 +0000
committerChristian Grothoff <christian@grothoff.org>2016-04-30 08:17:37 +0000
commit95f9076a2139f5fb042b944a0658b6cda2fa35db (patch)
treeb0826a2a1dcf812e6b4450fe6b05d47cd53ae49d /src/set
parent7746f68db77b9ca3c4aaca24ab2ce5253461240b (diff)
downloadgnunet-95f9076a2139f5fb042b944a0658b6cda2fa35db.tar.gz
gnunet-95f9076a2139f5fb042b944a0658b6cda2fa35db.zip
implementing new scheduler shutdown semantics
Diffstat (limited to 'src/set')
-rw-r--r--src/set/gnunet-service-set.c9
-rw-r--r--src/set/gnunet-set-profiler.c2
-rw-r--r--src/set/set_api.c10
-rw-r--r--src/set/test_set_api.c22
-rw-r--r--src/set/test_set_union_copy.c32
-rw-r--r--src/set/test_set_union_result_symmetric.c5
6 files changed, 35 insertions, 45 deletions
diff --git a/src/set/gnunet-service-set.c b/src/set/gnunet-service-set.c
index e9555928a..2aad60309 100644
--- a/src/set/gnunet-service-set.c
+++ b/src/set/gnunet-service-set.c
@@ -1710,7 +1710,6 @@ handle_client_accept (void *cls,
1710 * Called to clean up, after a shutdown has been requested. 1710 * Called to clean up, after a shutdown has been requested.
1711 * 1711 *
1712 * @param cls closure 1712 * @param cls closure
1713 * @param tc context information (why was this task triggered now)
1714 */ 1713 */
1715static void 1714static void
1716shutdown_task (void *cls) 1715shutdown_task (void *cls)
@@ -1740,7 +1739,6 @@ shutdown_task (void *cls)
1740 * - we suggested an operation to our listener, 1739 * - we suggested an operation to our listener,
1741 * but did not receive a response in time 1740 * but did not receive a response in time
1742 * - we got the channel from a peer but no #GNUNET_MESSAGE_TYPE_SET_P2P_OPERATION_REQUEST 1741 * - we got the channel from a peer but no #GNUNET_MESSAGE_TYPE_SET_P2P_OPERATION_REQUEST
1743 * - shutdown (obviously)
1744 * 1742 *
1745 * @param cls channel context 1743 * @param cls channel context
1746 * @param tc context information (why was this task triggered now) 1744 * @param tc context information (why was this task triggered now)
@@ -1749,13 +1747,9 @@ static void
1749incoming_timeout_cb (void *cls) 1747incoming_timeout_cb (void *cls)
1750{ 1748{
1751 struct Operation *incoming = cls; 1749 struct Operation *incoming = cls;
1752 const struct GNUNET_SCHEDULER_TaskContext *tc;
1753 1750
1754 incoming->timeout_task = NULL; 1751 incoming->timeout_task = NULL;
1755 GNUNET_assert (GNUNET_YES == incoming->is_incoming); 1752 GNUNET_assert (GNUNET_YES == incoming->is_incoming);
1756 tc = GNUNET_SCHEDULER_get_task_context ();
1757 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
1758 return;
1759 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1753 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1760 "Remote peer's incoming request timed out\n"); 1754 "Remote peer's incoming request timed out\n");
1761 incoming_destroy (incoming); 1755 incoming_destroy (incoming);
@@ -1997,8 +1991,7 @@ run (void *cls,
1997 static const uint32_t cadet_ports[] = {GNUNET_APPLICATION_TYPE_SET, 0}; 1991 static const uint32_t cadet_ports[] = {GNUNET_APPLICATION_TYPE_SET, 0};
1998 1992
1999 configuration = cfg; 1993 configuration = cfg;
2000 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, 1994 GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
2001 &shutdown_task, NULL);
2002 GNUNET_SERVER_disconnect_notify (server, 1995 GNUNET_SERVER_disconnect_notify (server,
2003 &handle_client_disconnect, NULL); 1996 &handle_client_disconnect, NULL);
2004 GNUNET_SERVER_add_handlers (server, 1997 GNUNET_SERVER_add_handlers (server,
diff --git a/src/set/gnunet-set-profiler.c b/src/set/gnunet-set-profiler.c
index ff76b27ce..186a2763e 100644
--- a/src/set/gnunet-set-profiler.c
+++ b/src/set/gnunet-set-profiler.c
@@ -299,7 +299,7 @@ run (void *cls,
299 299
300 statistics = GNUNET_STATISTICS_create ("set-profiler", cfg); 300 statistics = GNUNET_STATISTICS_create ("set-profiler", cfg);
301 301
302 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, handle_shutdown, NULL); 302 GNUNET_SCHEDULER_add_shutdown (&handle_shutdown, NULL);
303 303
304 info1.id = "a"; 304 info1.id = "a";
305 info2.id = "b"; 305 info2.id = "b";
diff --git a/src/set/set_api.c b/src/set/set_api.c
index 772140269..794ae57b7 100644
--- a/src/set/set_api.c
+++ b/src/set/set_api.c
@@ -230,7 +230,7 @@ struct GNUNET_SET_ListenHandle
230 /** 230 /**
231 * Task for reconnecting when the listener fails. 231 * Task for reconnecting when the listener fails.
232 */ 232 */
233 struct GNUNET_SCHEDULER_Task * reconnect_task; 233 struct GNUNET_SCHEDULER_Task *reconnect_task;
234 234
235 /** 235 /**
236 * Operation we listen for. 236 * Operation we listen for.
@@ -891,15 +891,7 @@ listen_connect (void *cls)
891 struct GNUNET_SET_ListenHandle *lh = cls; 891 struct GNUNET_SET_ListenHandle *lh = cls;
892 struct GNUNET_MQ_Envelope *mqm; 892 struct GNUNET_MQ_Envelope *mqm;
893 struct GNUNET_SET_ListenMessage *msg; 893 struct GNUNET_SET_ListenMessage *msg;
894 const struct GNUNET_SCHEDULER_TaskContext *tc;
895 894
896 tc = GNUNET_SCHEDULER_get_task_context ();
897 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
898 {
899 LOG (GNUNET_ERROR_TYPE_DEBUG,
900 "Listener not reconnecting due to shutdown\n");
901 return;
902 }
903 lh->reconnect_task = NULL; 895 lh->reconnect_task = NULL;
904 GNUNET_assert (NULL == lh->client); 896 GNUNET_assert (NULL == lh->client);
905 lh->client = GNUNET_CLIENT_connect ("set", lh->cfg); 897 lh->client = GNUNET_CLIENT_connect ("set", lh->cfg);
diff --git a/src/set/test_set_api.c b/src/set/test_set_api.c
index b5c21f8a3..d04877b39 100644
--- a/src/set/test_set_api.c
+++ b/src/set/test_set_api.c
@@ -44,6 +44,8 @@ static unsigned int iter_count;
44 44
45static int ret; 45static int ret;
46 46
47static struct GNUNET_SCHEDULER_Task *tt;
48
47 49
48static void 50static void
49result_cb_set1 (void *cls, 51result_cb_set1 (void *cls,
@@ -61,6 +63,8 @@ result_cb_set1 (void *cls,
61 fprintf (stderr, 63 fprintf (stderr,
62 "set 1: received failure status!\n"); 64 "set 1: received failure status!\n");
63 ret = 1; 65 ret = 1;
66 GNUNET_SCHEDULER_cancel (tt);
67 tt = NULL;
64 GNUNET_SCHEDULER_shutdown (); 68 GNUNET_SCHEDULER_shutdown ();
65 break; 69 break;
66 case GNUNET_SET_STATUS_DONE: 70 case GNUNET_SET_STATUS_DONE:
@@ -69,7 +73,11 @@ result_cb_set1 (void *cls,
69 GNUNET_SET_destroy (set1); 73 GNUNET_SET_destroy (set1);
70 set1 = NULL; 74 set1 = NULL;
71 if (NULL == set2) 75 if (NULL == set2)
76 {
77 GNUNET_SCHEDULER_cancel (tt);
78 tt = NULL;
72 GNUNET_SCHEDULER_shutdown (); 79 GNUNET_SCHEDULER_shutdown ();
80 }
73 break; 81 break;
74 default: 82 default:
75 GNUNET_assert (0); 83 GNUNET_assert (0);
@@ -100,7 +108,11 @@ result_cb_set2 (void *cls,
100 GNUNET_SET_destroy (set2); 108 GNUNET_SET_destroy (set2);
101 set2 = NULL; 109 set2 = NULL;
102 if (NULL == set1) 110 if (NULL == set1)
111 {
112 GNUNET_SCHEDULER_cancel (tt);
113 tt = NULL;
103 GNUNET_SCHEDULER_shutdown (); 114 GNUNET_SCHEDULER_shutdown ();
115 }
104 break; 116 break;
105 default: 117 default:
106 GNUNET_assert (0); 118 GNUNET_assert (0);
@@ -250,11 +262,7 @@ test_iter ()
250static void 262static void
251timeout_fail (void *cls) 263timeout_fail (void *cls)
252{ 264{
253 const struct GNUNET_SCHEDULER_TaskContext *tc; 265 tt = NULL;
254
255 tc = GNUNET_SCHEDULER_get_task_context ();
256 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
257 return;
258 GNUNET_SCHEDULER_shutdown (); 266 GNUNET_SCHEDULER_shutdown ();
259 ret = 1; 267 ret = 1;
260} 268}
@@ -276,8 +284,8 @@ run (void *cls,
276 284
277 struct GNUNET_SET_OperationHandle *my_oh; 285 struct GNUNET_SET_OperationHandle *my_oh;
278 286
279 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5), 287 tt = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5),
280 &timeout_fail, NULL); 288 &timeout_fail, NULL);
281 289
282 config = cfg; 290 config = cfg;
283 GNUNET_CRYPTO_get_peer_identity (cfg, &local_id); 291 GNUNET_CRYPTO_get_peer_identity (cfg, &local_id);
diff --git a/src/set/test_set_union_copy.c b/src/set/test_set_union_copy.c
index fdf6bf9df..7fedf426b 100644
--- a/src/set/test_set_union_copy.c
+++ b/src/set/test_set_union_copy.c
@@ -42,6 +42,8 @@ static struct GNUNET_SET_Handle *set2;
42 42
43static const struct GNUNET_CONFIGURATION_Handle *config; 43static const struct GNUNET_CONFIGURATION_Handle *config;
44 44
45static struct GNUNET_SCHEDULER_Task *tt;
46
45 47
46static void 48static void
47add_element_str (struct GNUNET_SET_Handle *set, char *str) 49add_element_str (struct GNUNET_SET_Handle *set, char *str)
@@ -77,11 +79,7 @@ remove_element_str (struct GNUNET_SET_Handle *set, char *str)
77static void 79static void
78timeout_fail (void *cls) 80timeout_fail (void *cls)
79{ 81{
80 const struct GNUNET_SCHEDULER_TaskContext *tc; 82 tt = NULL;
81
82 tc = GNUNET_SCHEDULER_get_task_context ();
83 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
84 return;
85 GNUNET_SCHEDULER_shutdown (); 83 GNUNET_SCHEDULER_shutdown ();
86 ret = 1; 84 ret = 1;
87} 85}
@@ -125,8 +123,7 @@ check_count_iter (void *cls,
125} 123}
126 124
127 125
128 126static void
129void
130check_count (struct GNUNET_SET_Handle *set, 127check_count (struct GNUNET_SET_Handle *set,
131 char *what, 128 char *what,
132 unsigned int expected_count, 129 unsigned int expected_count,
@@ -145,24 +142,28 @@ check_count (struct GNUNET_SET_Handle *set,
145} 142}
146 143
147 144
148void test_done (void *cls) 145static void
146test_done (void *cls)
149{ 147{
150 if (NULL != set1) 148 if (NULL != set1)
151 GNUNET_SET_destroy (set1); 149 GNUNET_SET_destroy (set1);
152 if (NULL != set2) 150 if (NULL != set2)
153 GNUNET_SET_destroy (set2); 151 GNUNET_SET_destroy (set2);
154 152 GNUNET_SCHEDULER_cancel (tt);
153 tt = NULL;
155 GNUNET_SCHEDULER_shutdown (); 154 GNUNET_SCHEDULER_shutdown ();
156} 155}
157 156
158 157
159void check_new_set_count (void *cls) 158static void
159check_new_set_count (void *cls)
160{ 160{
161 check_count (set2, "new set", 4, &test_done, NULL); 161 check_count (set2, "new set", 4, &test_done, NULL);
162} 162}
163 163
164 164
165void copy_done (void *cls, struct GNUNET_SET_Handle *new_set) 165static void
166copy_done (void *cls, struct GNUNET_SET_Handle *new_set)
166{ 167{
167 printf ("copy done\n"); 168 printf ("copy done\n");
168 set2 = new_set; 169 set2 = new_set;
@@ -177,7 +178,8 @@ void copy_done (void *cls, struct GNUNET_SET_Handle *new_set)
177} 178}
178 179
179 180
180void test_copy (void *cls) 181static void
182test_copy (void *cls)
181{ 183{
182 printf ("about to copy\n"); 184 printf ("about to copy\n");
183 GNUNET_SET_copy_lazy (set1, copy_done, NULL); 185 GNUNET_SET_copy_lazy (set1, copy_done, NULL);
@@ -198,9 +200,9 @@ run (void *cls,
198 const struct GNUNET_CONFIGURATION_Handle *cfg, 200 const struct GNUNET_CONFIGURATION_Handle *cfg,
199 struct GNUNET_TESTING_Peer *peer) 201 struct GNUNET_TESTING_Peer *peer)
200{ 202{
201 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5), 203 tt = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5),
202 &timeout_fail, 204 &timeout_fail,
203 NULL); 205 NULL);
204 206
205 config = cfg; 207 config = cfg;
206 GNUNET_TESTING_peer_get_identity (peer, 208 GNUNET_TESTING_peer_get_identity (peer,
diff --git a/src/set/test_set_union_result_symmetric.c b/src/set/test_set_union_result_symmetric.c
index b312bcb4c..77fec71c6 100644
--- a/src/set/test_set_union_result_symmetric.c
+++ b/src/set/test_set_union_result_symmetric.c
@@ -297,11 +297,6 @@ test_iter ()
297static void 297static void
298timeout_fail (void *cls) 298timeout_fail (void *cls)
299{ 299{
300 const struct GNUNET_SCHEDULER_TaskContext *tc;
301
302 tc = GNUNET_SCHEDULER_get_task_context ();
303 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
304 return;
305 GNUNET_SCHEDULER_shutdown (); 300 GNUNET_SCHEDULER_shutdown ();
306 ret = 1; 301 ret = 1;
307} 302}