diff options
author | Christian Grothoff <christian@grothoff.org> | 2013-09-30 10:45:05 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2013-09-30 10:45:05 +0000 |
commit | ba188e0085612a599d67de0151aa514373dbbede (patch) | |
tree | 1aa20fa6769fce598e2d69072e4c6de0a42761e1 /src/namestore | |
parent | ddbfc45f26b4851cbda1bffa19d1b980518dd7fb (diff) | |
download | gnunet-ba188e0085612a599d67de0151aa514373dbbede.tar.gz gnunet-ba188e0085612a599d67de0151aa514373dbbede.zip |
-fixing namestore to not disconnect on empty iteration result --- and namestore API to better survive disconnect
Diffstat (limited to 'src/namestore')
-rw-r--r-- | src/namestore/gnunet-service-namestore.c | 4 | ||||
-rw-r--r-- | src/namestore/namestore_api.c | 35 |
2 files changed, 29 insertions, 10 deletions
diff --git a/src/namestore/gnunet-service-namestore.c b/src/namestore/gnunet-service-namestore.c index ea5ad6cd0..1a675cb1f 100644 --- a/src/namestore/gnunet-service-namestore.c +++ b/src/namestore/gnunet-service-namestore.c | |||
@@ -844,7 +844,7 @@ handle_zone_to_name (void *cls, | |||
844 | &ztnr_msg.gns_header.header, | 844 | &ztnr_msg.gns_header.header, |
845 | GNUNET_NO); | 845 | GNUNET_NO); |
846 | } | 846 | } |
847 | GNUNET_SERVER_receive_done (client, ztn_ctx.success); | 847 | GNUNET_SERVER_receive_done (client, GNUNET_OK); |
848 | } | 848 | } |
849 | 849 | ||
850 | 850 | ||
@@ -1176,7 +1176,7 @@ monitor_iterate_cb (void *cls, | |||
1176 | 1176 | ||
1177 | 1177 | ||
1178 | /** | 1178 | /** |
1179 | * Handles a 'GNUNET_MESSAGE_TYPE_NAMESTORE_MONITOR_START' message | 1179 | * Handles a #GNUNET_MESSAGE_TYPE_NAMESTORE_MONITOR_START message |
1180 | * | 1180 | * |
1181 | * @param cls unused | 1181 | * @param cls unused |
1182 | * @param client GNUNET_SERVER_Client sending the message | 1182 | * @param client GNUNET_SERVER_Client sending the message |
diff --git a/src/namestore/namestore_api.c b/src/namestore/namestore_api.c index 3875e3cbf..1832d83f7 100644 --- a/src/namestore/namestore_api.c +++ b/src/namestore/namestore_api.c | |||
@@ -226,6 +226,11 @@ struct GNUNET_NAMESTORE_Handle | |||
226 | GNUNET_SCHEDULER_TaskIdentifier reconnect_task; | 226 | GNUNET_SCHEDULER_TaskIdentifier reconnect_task; |
227 | 227 | ||
228 | /** | 228 | /** |
229 | * Delay introduced before we reconnect. | ||
230 | */ | ||
231 | struct GNUNET_TIME_Relative reconnect_delay; | ||
232 | |||
233 | /** | ||
229 | * Should we reconnect to service due to some serious error? | 234 | * Should we reconnect to service due to some serious error? |
230 | */ | 235 | */ |
231 | int reconnect; | 236 | int reconnect; |
@@ -858,6 +863,7 @@ do_transmit (struct GNUNET_NAMESTORE_Handle *h) | |||
858 | GNUNET_TIME_UNIT_FOREVER_REL, | 863 | GNUNET_TIME_UNIT_FOREVER_REL, |
859 | GNUNET_NO, &transmit_message_to_namestore, | 864 | GNUNET_NO, &transmit_message_to_namestore, |
860 | h); | 865 | h); |
866 | GNUNET_break (NULL != h->th); | ||
861 | } | 867 | } |
862 | 868 | ||
863 | 869 | ||
@@ -901,11 +907,19 @@ reconnect_task (void *cls, | |||
901 | static void | 907 | static void |
902 | force_reconnect (struct GNUNET_NAMESTORE_Handle *h) | 908 | force_reconnect (struct GNUNET_NAMESTORE_Handle *h) |
903 | { | 909 | { |
910 | if (NULL != h->th) | ||
911 | { | ||
912 | GNUNET_CLIENT_notify_transmit_ready_cancel (h->th); | ||
913 | h->th = NULL; | ||
914 | } | ||
904 | h->reconnect = GNUNET_NO; | 915 | h->reconnect = GNUNET_NO; |
905 | GNUNET_CLIENT_disconnect (h->client); | 916 | GNUNET_CLIENT_disconnect (h->client); |
917 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
918 | "Reconnecting to namestore\n"); | ||
906 | h->is_receiving = GNUNET_NO; | 919 | h->is_receiving = GNUNET_NO; |
907 | h->client = NULL; | 920 | h->client = NULL; |
908 | h->reconnect_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, | 921 | h->reconnect_delay = GNUNET_TIME_STD_BACKOFF (h->reconnect_delay); |
922 | h->reconnect_task = GNUNET_SCHEDULER_add_delayed (h->reconnect_delay, | ||
909 | &reconnect_task, | 923 | &reconnect_task, |
910 | h); | 924 | h); |
911 | } | 925 | } |
@@ -958,6 +972,11 @@ GNUNET_NAMESTORE_disconnect (struct GNUNET_NAMESTORE_Handle *h) | |||
958 | 972 | ||
959 | LOG (GNUNET_ERROR_TYPE_DEBUG, "Cleaning up\n"); | 973 | LOG (GNUNET_ERROR_TYPE_DEBUG, "Cleaning up\n"); |
960 | GNUNET_assert (NULL != h); | 974 | GNUNET_assert (NULL != h); |
975 | if (NULL != h->th) | ||
976 | { | ||
977 | GNUNET_CLIENT_notify_transmit_ready_cancel (h->th); | ||
978 | h->th = NULL; | ||
979 | } | ||
961 | while (NULL != (p = h->pending_head)) | 980 | while (NULL != (p = h->pending_head)) |
962 | { | 981 | { |
963 | GNUNET_CONTAINER_DLL_remove (h->pending_head, h->pending_tail, p); | 982 | GNUNET_CONTAINER_DLL_remove (h->pending_head, h->pending_tail, p); |
@@ -1041,7 +1060,7 @@ GNUNET_NAMESTORE_block_cache (struct GNUNET_NAMESTORE_Handle *h, | |||
1041 | "NAMESTORE_BLOCK_CACHE", | 1060 | "NAMESTORE_BLOCK_CACHE", |
1042 | (unsigned int) msg_size); | 1061 | (unsigned int) msg_size); |
1043 | GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); | 1062 | GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); |
1044 | do_transmit(h); | 1063 | do_transmit (h); |
1045 | return qe; | 1064 | return qe; |
1046 | } | 1065 | } |
1047 | 1066 | ||
@@ -1123,7 +1142,7 @@ GNUNET_NAMESTORE_records_store (struct GNUNET_NAMESTORE_Handle *h, | |||
1123 | "NAMESTORE_RECORD_STORE", label, msg_size, | 1142 | "NAMESTORE_RECORD_STORE", label, msg_size, |
1124 | rd_count); | 1143 | rd_count); |
1125 | GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); | 1144 | GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); |
1126 | do_transmit(h); | 1145 | do_transmit (h); |
1127 | return qe; | 1146 | return qe; |
1128 | } | 1147 | } |
1129 | 1148 | ||
@@ -1172,7 +1191,7 @@ GNUNET_NAMESTORE_lookup_block (struct GNUNET_NAMESTORE_Handle *h, | |||
1172 | msg->gns_header.r_id = htonl (rid); | 1191 | msg->gns_header.r_id = htonl (rid); |
1173 | msg->query = *derived_hash; | 1192 | msg->query = *derived_hash; |
1174 | GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); | 1193 | GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); |
1175 | do_transmit(h); | 1194 | do_transmit (h); |
1176 | return qe; | 1195 | return qe; |
1177 | } | 1196 | } |
1178 | 1197 | ||
@@ -1225,7 +1244,7 @@ GNUNET_NAMESTORE_zone_to_name (struct GNUNET_NAMESTORE_Handle *h, | |||
1225 | 1244 | ||
1226 | /* transmit message */ | 1245 | /* transmit message */ |
1227 | GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); | 1246 | GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); |
1228 | do_transmit(h); | 1247 | do_transmit (h); |
1229 | return qe; | 1248 | return qe; |
1230 | } | 1249 | } |
1231 | 1250 | ||
@@ -1279,7 +1298,7 @@ GNUNET_NAMESTORE_zone_iteration_start (struct GNUNET_NAMESTORE_Handle *h, | |||
1279 | if (NULL != zone) | 1298 | if (NULL != zone) |
1280 | msg->zone = *zone; | 1299 | msg->zone = *zone; |
1281 | GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); | 1300 | GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); |
1282 | do_transmit(h); | 1301 | do_transmit (h); |
1283 | return it; | 1302 | return it; |
1284 | } | 1303 | } |
1285 | 1304 | ||
@@ -1311,7 +1330,7 @@ GNUNET_NAMESTORE_zone_iterator_next (struct GNUNET_NAMESTORE_ZoneIterator *it) | |||
1311 | "Sending `%s' message\n", | 1330 | "Sending `%s' message\n", |
1312 | "ZONE_ITERATION_NEXT"); | 1331 | "ZONE_ITERATION_NEXT"); |
1313 | GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); | 1332 | GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); |
1314 | do_transmit(h); | 1333 | do_transmit (h); |
1315 | } | 1334 | } |
1316 | 1335 | ||
1317 | 1336 | ||
@@ -1344,7 +1363,7 @@ GNUNET_NAMESTORE_zone_iteration_stop (struct GNUNET_NAMESTORE_ZoneIterator *it) | |||
1344 | "Sending `%s' message\n", | 1363 | "Sending `%s' message\n", |
1345 | "ZONE_ITERATION_STOP"); | 1364 | "ZONE_ITERATION_STOP"); |
1346 | GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); | 1365 | GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); |
1347 | do_transmit(h); | 1366 | do_transmit (h); |
1348 | GNUNET_free (it); | 1367 | GNUNET_free (it); |
1349 | } | 1368 | } |
1350 | 1369 | ||