[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r15338 - gnunet/src/fs
From: |
gnunet |
Subject: |
[GNUnet-SVN] r15338 - gnunet/src/fs |
Date: |
Fri, 27 May 2011 15:32:13 +0200 |
Author: grothoff
Date: 2011-05-27 15:32:13 +0200 (Fri, 27 May 2011)
New Revision: 15338
Modified:
gnunet/src/fs/gnunet-service-fs_pr.c
Log:
check DATASTORE return values
Modified: gnunet/src/fs/gnunet-service-fs_pr.c
===================================================================
--- gnunet/src/fs/gnunet-service-fs_pr.c 2011-05-27 13:31:46 UTC (rev
15337)
+++ gnunet/src/fs/gnunet-service-fs_pr.c 2011-05-27 13:32:13 UTC (rev
15338)
@@ -578,16 +578,31 @@
GSF_plan_notify_request_done_ (pr);
GNUNET_free_non_null (pr->replies_seen);
if (NULL != pr->bf)
- GNUNET_CONTAINER_bloomfilter_free (pr->bf);
+ {
+ GNUNET_CONTAINER_bloomfilter_free (pr->bf);
+ pr->bf = NULL;
+ }
GNUNET_PEER_change_rc (pr->sender_pid, -1);
if (NULL != pr->hnode)
- GNUNET_CONTAINER_heap_remove_node (pr->hnode);
+ {
+ GNUNET_CONTAINER_heap_remove_node (pr->hnode);
+ pr->hnode = NULL;
+ }
if (NULL != pr->qe)
- GNUNET_DATASTORE_cancel (pr->qe);
+ {
+ GNUNET_DATASTORE_cancel (pr->qe);
+ pr->qe = NULL;
+ }
if (NULL != pr->gh)
- GNUNET_DHT_get_stop (pr->gh);
+ {
+ GNUNET_DHT_get_stop (pr->gh);
+ pr->gh = NULL;
+ }
if (GNUNET_SCHEDULER_NO_TASK != pr->warn_task)
- GNUNET_SCHEDULER_cancel (pr->warn_task);
+ {
+ GNUNET_SCHEDULER_cancel (pr->warn_task);
+ pr->warn_task = GNUNET_SCHEDULER_NO_TASK;
+ }
GNUNET_free (pr);
return GNUNET_YES;
}
@@ -970,15 +985,19 @@
pmc = GNUNET_malloc (sizeof (struct PutMigrationContext));
pmc->start = GNUNET_TIME_absolute_get ();
pmc->requested = GNUNET_YES;
- GNUNET_DATASTORE_put (GSF_dsh,
- 0, key, size, data,
- type, prq.priority, 1 /* anonymity */,
- 0 /* replication */,
- exp,
- 1 + prq.priority, MAX_DATASTORE_QUEUE,
- GNUNET_CONSTANTS_SERVICE_TIMEOUT,
- &put_migration_continuation,
- pmc);
+ if (NULL ==
+ GNUNET_DATASTORE_put (GSF_dsh,
+ 0, key, size, data,
+ type, prq.priority, 1 /* anonymity */,
+ 0 /* replication */,
+ exp,
+ 1 + prq.priority, MAX_DATASTORE_QUEUE,
+ GNUNET_CONSTANTS_SERVICE_TIMEOUT,
+ &put_migration_continuation,
+ pmc))
+ {
+ put_migration_continuation (pmc, GNUNET_NO, NULL);
+ }
}
}
@@ -1127,14 +1146,7 @@
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"No further local responses available.\n");
#endif
- if (NULL != (cont = pr->llc_cont))
- {
- pr->llc_cont = NULL;
- cont (pr->llc_cont_cls,
- pr,
- pr->local_result);
- }
- return;
+ goto check_error_and_continue;
}
#if DEBUG_FS
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -1157,34 +1169,34 @@
pr->warn_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES,
&odc_warn_delay_task,
pr);
- if (GNUNET_OK !=
+ if (GNUNET_OK ==
GNUNET_FS_handle_on_demand_block (key, size, data, type, priority,
anonymity, expiration, uid,
&process_local_reply,
pr))
- {
- GNUNET_SCHEDULER_cancel (pr->warn_task);
- pr->warn_task = GNUNET_SCHEDULER_add_delayed
(GNUNET_TIME_UNIT_MINUTES,
- &warn_delay_task,
- pr);
- pr->qe = GNUNET_DATASTORE_get_key (GSF_dsh,
- pr->local_result_offset - 1,
- &pr->public_data.query,
- pr->public_data.type ==
GNUNET_BLOCK_TYPE_FS_DBLOCK
- ? GNUNET_BLOCK_TYPE_ANY
- : pr->public_data.type,
- (0 != (GSF_PRO_PRIORITY_UNLIMITED
& pr->public_data.options))
- ? UINT_MAX
- : 1 /* queue priority */,
- (0 != (GSF_PRO_PRIORITY_UNLIMITED
& pr->public_data.options))
- ? UINT_MAX
- : 1 /* max queue size */,
- GNUNET_TIME_UNIT_FOREVER_REL,
- &process_local_reply,
- pr);
- GNUNET_assert (NULL != pr->qe);
- }
- return;
+ return; /* we're done */
+ GNUNET_SCHEDULER_cancel (pr->warn_task);
+ pr->warn_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES,
+ &warn_delay_task,
+ pr);
+ pr->qe = GNUNET_DATASTORE_get_key (GSF_dsh,
+ pr->local_result_offset - 1,
+ &pr->public_data.query,
+ pr->public_data.type ==
GNUNET_BLOCK_TYPE_FS_DBLOCK
+ ? GNUNET_BLOCK_TYPE_ANY
+ : pr->public_data.type,
+ (0 != (GSF_PRO_PRIORITY_UNLIMITED &
pr->public_data.options))
+ ? UINT_MAX
+ : 1 /* queue priority */,
+ (0 != (GSF_PRO_PRIORITY_UNLIMITED &
pr->public_data.options))
+ ? UINT_MAX
+ : 1 /* max queue size */,
+ GNUNET_TIME_UNIT_FOREVER_REL,
+ &process_local_reply,
+ pr);
+ if (NULL != pr->qe)
+ return; /* we're done */
+ goto check_error_and_continue;
}
old_rf = pr->public_data.results_found;
memset (&prq, 0, sizeof (prq));
@@ -1224,7 +1236,10 @@
GNUNET_TIME_UNIT_FOREVER_REL,
&process_local_reply,
pr);
- GNUNET_assert (NULL != pr->qe);
+ if (pr->qe == NULL)
+ {
+ goto check_error_and_continue;
+ }
return;
}
prq.type = type;
@@ -1237,16 +1252,7 @@
process_reply (&prq, key, pr);
pr->local_result = prq.eval;
if (prq.eval == GNUNET_BLOCK_EVALUATION_OK_LAST)
- {
- if (NULL != (cont = pr->llc_cont))
- {
- pr->llc_cont = NULL;
- cont (pr->llc_cont_cls,
- pr,
- pr->local_result);
- }
- return;
- }
+ goto check_error_and_continue;
if ( (0 == (GSF_PRO_PRIORITY_UNLIMITED & pr->public_data.options)) &&
( (GNUNET_YES == GSF_test_get_load_too_high_ (0)) ||
(pr->public_data.results_found > 5 + 2 * pr->public_data.priority) ) )
@@ -1259,14 +1265,7 @@
gettext_noop ("# processing result set cut
short due to load"),
1,
GNUNET_NO);
- if (NULL != (cont = pr->llc_cont))
- {
- pr->llc_cont = NULL;
- cont (pr->llc_cont_cls,
- pr,
- pr->local_result);
- }
- return;
+ goto check_error_and_continue;
}
pr->qe_start = GNUNET_TIME_absolute_get ();
pr->warn_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES,
@@ -1287,7 +1286,23 @@
GNUNET_TIME_UNIT_FOREVER_REL,
&process_local_reply,
pr);
- GNUNET_assert (NULL != pr->qe);
+ /* check if we successfully queued another datastore request;
+ if so, return, otherwise call our continuation (if we have
+ any) */
+ check_error_and_continue:
+ if (NULL != pr->qe)
+ return;
+ if (GNUNET_SCHEDULER_NO_TASK != pr->warn_task)
+ {
+ GNUNET_SCHEDULER_cancel (pr->warn_task);
+ pr->warn_task = GNUNET_SCHEDULER_NO_TASK;
+ }
+ if (NULL == (cont = pr->llc_cont))
+ return; /* no continuation */
+ pr->llc_cont = NULL;
+ cont (pr->llc_cont_cls,
+ pr,
+ pr->local_result);
}
@@ -1326,6 +1341,13 @@
GNUNET_TIME_UNIT_FOREVER_REL,
&process_local_reply,
pr);
+ if (NULL != pr->qe)
+ return;
+ GNUNET_SCHEDULER_cancel (pr->warn_task);
+ pr->warn_task = GNUNET_SCHEDULER_NO_TASK;
+ pr->llc_cont = NULL;
+ if (NULL != cont)
+ cont (cont_cls, pr, pr->local_result);
}
@@ -1415,15 +1437,19 @@
pmc->requested = prq.request_found;
GNUNET_PEER_resolve (GSF_get_peer_performance_data_ (cp)->pid,
&pmc->origin);
- GNUNET_DATASTORE_put (GSF_dsh,
- 0, &query, dsize, &put[1],
- type, prq.priority, 1 /* anonymity */,
- 0 /* replication */,
- expiration,
- 1 + prq.priority, MAX_DATASTORE_QUEUE,
- GNUNET_CONSTANTS_SERVICE_TIMEOUT,
- &put_migration_continuation,
- pmc);
+ if (NULL ==
+ GNUNET_DATASTORE_put (GSF_dsh,
+ 0, &query, dsize, &put[1],
+ type, prq.priority, 1 /* anonymity */,
+ 0 /* replication */,
+ expiration,
+ 1 + prq.priority, MAX_DATASTORE_QUEUE,
+ GNUNET_CONSTANTS_SERVICE_TIMEOUT,
+ &put_migration_continuation,
+ pmc))
+ {
+ put_migration_continuation (pmc, GNUNET_NO, NULL);
+ }
}
else
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r15338 - gnunet/src/fs,
gnunet <=