*/
static struct GNUNET_PEERSTORE_Handle *peerstore;
+/**
+ * Task used to flush respect values to disk.
+ */
+static struct GNUNET_SCHEDULER_Task *fr_task;
+
/**
* Update the latency information kept for the given peer.
* (re)try to reserve bandwidth from the given peer.
*
* @param cls the `struct GSF_ConnectedPeer` to reserve from
- * @param tc scheduler context
*/
static void
-retry_reservation (void *cls,
- const struct GNUNET_SCHEDULER_TaskContext *tc)
+retry_reservation (void *cls)
{
struct GSF_ConnectedPeer *cp = cls;
struct GNUNET_PeerIdentity target;
* @param cls handle to connected peer entry
* @param record peerstore record information
* @param emsg error message, or NULL if no errors
- * @return #GNUNET_NO to stop iterating since we only expect 0 or 1 records
*/
-static int
+static void
peer_respect_cb (void *cls,
const struct GNUNET_PEERSTORE_Record *record,
const char *emsg)
struct GSF_ConnectedPeer *cp = cls;
GNUNET_assert (NULL != cp->respect_iterate_req);
- cp->respect_iterate_req = NULL;
+ printf("Got a record!\n");
if ((NULL != record) && (sizeof (cp->disk_respect) == record->value_size))
cp->disk_respect = cp->ppd.respect = *((uint32_t *)record->value);
GSF_push_start_ (cp);
if (NULL != cp->creation_cb)
cp->creation_cb (cp->creation_cb_cls, cp);
- return GNUNET_NO;
+ if (NULL != record)
+ {
+ printf("Cancelling!\n");
+ GNUNET_PEERSTORE_iterate_cancel (cp->respect_iterate_req);
+ cp->respect_iterate_req = NULL;
+ }
}
* peer. Check, and if so, restart migration.
*
* @param cls the `struct GSF_ConnectedPeer`
- * @param tc scheduler context
*/
static void
-revive_migration (void *cls,
- const struct GNUNET_SCHEDULER_TaskContext *tc)
+revive_migration (void *cls)
{
struct GSF_ConnectedPeer *cp = cls;
struct GNUNET_TIME_Relative bt;
* Free the given request.
*
* @param cls the request to free
- * @param tc task context
*/
static void
-peer_request_destroy (void *cls,
- const struct GNUNET_SCHEDULER_TaskContext *tc)
+peer_request_destroy (void *cls)
{
struct PeerRequest *peerreq = cls;
struct GSF_PendingRequest *pr = peerreq->pr;
* The artificial delay is over, transmit the message now.
*
* @param cls the `struct GSF_DelayedHandle` with the message
- * @param tc scheduler context
*/
static void
-transmit_delayed_now (void *cls,
- const struct GNUNET_SCHEDULER_TaskContext *tc)
+transmit_delayed_now (void *cls)
{
struct GSF_DelayedHandle *dh = cls;
struct GSF_ConnectedPeer *cp = dh->cp;
cp->delayed_tail,
dh);
cp->delay_queue_size--;
- if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
- {
- GNUNET_free (dh->pm);
- GNUNET_free (dh);
- return;
- }
(void) GSF_peer_transmit_ (cp,
GNUNET_NO,
UINT32_MAX,
* a transmission request.
*
* @param cls the `struct GSF_PeerTransmitHandle` of the request
- * @param tc scheduler context
*/
static void
-peer_transmit_timeout (void *cls,
- const struct GNUNET_SCHEDULER_TaskContext *tc)
+peer_transmit_timeout (void *cls)
{
struct GSF_PeerTransmitHandle *pth = cls;
struct GSF_ConnectedPeer *cp;
* Call this method periodically to flush respect information to disk.
*
* @param cls closure, not used
- * @param tc task context, not used
*/
static void
-cron_flush_respect (void *cls,
- const struct GNUNET_SCHEDULER_TaskContext *tc)
+cron_flush_respect (void *cls)
{
- if (NULL == cp_map)
- return;
+ fr_task = NULL;
GNUNET_CONTAINER_multipeermap_iterate (cp_map,
- &flush_respect, NULL);
- if (NULL == tc)
- return;
- if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
- return;
- GNUNET_SCHEDULER_add_delayed_with_priority (RESPECT_FLUSH_FREQ,
- GNUNET_SCHEDULER_PRIORITY_HIGH,
- &cron_flush_respect, NULL);
+ &flush_respect,
+ NULL);
+ fr_task = GNUNET_SCHEDULER_add_delayed_with_priority (RESPECT_FLUSH_FREQ,
+ GNUNET_SCHEDULER_PRIORITY_HIGH,
+ &cron_flush_respect, NULL);
}
{
cp_map = GNUNET_CONTAINER_multipeermap_create (128, GNUNET_YES);
peerstore = GNUNET_PEERSTORE_connect (GSF_cfg);
- GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_HIGH,
- &cron_flush_respect, NULL);
+ fr_task = GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_HIGH,
+ &cron_flush_respect, NULL);
}
void
GSF_connected_peer_done_ ()
{
- cron_flush_respect (NULL, NULL);
GNUNET_CONTAINER_multipeermap_iterate (cp_map,
- &clean_peer, NULL);
+ &flush_respect,
+ NULL);
+ GNUNET_CONTAINER_multipeermap_iterate (cp_map,
+ &clean_peer,
+ NULL);
+ GNUNET_SCHEDULER_cancel (fr_task);
+ fr_task = NULL;
GNUNET_CONTAINER_multipeermap_destroy (cp_map);
cp_map = NULL;
- GNUNET_PEERSTORE_disconnect (peerstore, GNUNET_YES);
+ GNUNET_PEERSTORE_disconnect (peerstore,
+ GNUNET_YES);
+
}