diff options
| author | Christian Grothoff <christian@grothoff.org> | 2020-02-11 15:40:37 +0100 | 
|---|---|---|
| committer | Christian Grothoff <christian@grothoff.org> | 2020-02-11 15:40:37 +0100 | 
| commit | 3ad698d01865c9f1b5c5aadc2f4d8b0a3658b81c (patch) | |
| tree | 671de5acc0a13cafe636bf1e220496a5882a8b74 /src/exchange/taler-exchange-aggregator.c | |
| parent | de0d987e34d426f6ed3593840078442191255587 (diff) | |
| parent | cdaf1ce69b5fb56f09bbdc00942b03f039710614 (diff) | |
merging
Diffstat (limited to 'src/exchange/taler-exchange-aggregator.c')
| -rw-r--r-- | src/exchange/taler-exchange-aggregator.c | 36 | 
1 files changed, 32 insertions, 4 deletions
diff --git a/src/exchange/taler-exchange-aggregator.c b/src/exchange/taler-exchange-aggregator.c index a43277b2..d380c391 100644 --- a/src/exchange/taler-exchange-aggregator.c +++ b/src/exchange/taler-exchange-aggregator.c @@ -582,6 +582,7 @@ shutdown_task (void *cls)      ctc = NULL;    }    TALER_EXCHANGEDB_plugin_unload (db_plugin); +  db_plugin = NULL;    {      struct WireAccount *wa; @@ -670,6 +671,7 @@ parse_wirewatch_config ()      fprintf (stderr,               "Failed to initialize DB tables\n");      TALER_EXCHANGEDB_plugin_unload (db_plugin); +    db_plugin = NULL;      return GNUNET_SYSERR;    }    TALER_EXCHANGEDB_find_accounts (cfg, @@ -680,6 +682,7 @@ parse_wirewatch_config ()      fprintf (stderr,               "No wire accounts configured for debit!\n");      TALER_EXCHANGEDB_plugin_unload (db_plugin); +    db_plugin = NULL;      return GNUNET_SYSERR;    }    return GNUNET_OK; @@ -1179,10 +1182,9 @@ expired_reserve_cb (void *cls,      /* Reserve balance was almost zero OR soft error */      GNUNET_log (GNUNET_ERROR_TYPE_INFO,                  "Reserve was virtually empty, moving on\n"); -    (void) commit_or_warn (ctc->session); -    GNUNET_free (ctc->method); -    GNUNET_free (ctc); -    ctc = NULL; +    (void) commit_or_warn (session); +    erc->async_cont = GNUNET_YES; +    GNUNET_assert (NULL == task);      task = GNUNET_SCHEDULER_add_now (&run_transfers,                                       NULL);      return qs; @@ -1223,6 +1225,7 @@ expired_reserve_cb (void *cls,      return GNUNET_DB_STATUS_SUCCESS_NO_RESULTS;    }    erc->async_cont = GNUNET_YES; +  GNUNET_assert (NULL == task);    task = GNUNET_SCHEDULER_add_now (&run_transfers,                                     NULL);    GNUNET_free (ctc->method); @@ -1299,6 +1302,7 @@ run_reserve_closures (void *cls)    case GNUNET_DB_STATUS_SOFT_ERROR:      db_plugin->rollback (db_plugin->cls,                           session); +    GNUNET_assert (NULL == task);      task = GNUNET_SCHEDULER_add_now (&run_reserve_closures,                                       NULL);      return; @@ -1308,6 +1312,7 @@ run_reserve_closures (void *cls)      reserves_idle = GNUNET_YES;      db_plugin->rollback (db_plugin->cls,                           session); +    GNUNET_assert (NULL == task);      task = GNUNET_SCHEDULER_add_now (&run_aggregation,                                       NULL);      return; @@ -1315,6 +1320,7 @@ run_reserve_closures (void *cls)      (void) commit_or_warn (session);      if (GNUNET_YES == erc.async_cont)        break; +    GNUNET_assert (NULL == task);      task = GNUNET_SCHEDULER_add_now (&run_reserve_closures,                                       NULL);      return; @@ -1345,6 +1351,7 @@ run_aggregation (void *cls)      return;    if (0 == (++swap % 2))    { +    GNUNET_assert (NULL == task);      task = GNUNET_SCHEDULER_add_now (&run_reserve_closures,                                       NULL);      return; @@ -1392,6 +1399,7 @@ run_aggregation (void *cls)      {        /* should re-try immediately */        swap--; /* do not count failed attempts */ +      GNUNET_assert (NULL == task);        task = GNUNET_SCHEDULER_add_now (&run_aggregation,                                         NULL);        return; @@ -1408,15 +1416,21 @@ run_aggregation (void *cls)      {        if ( (GNUNET_NO == reserves_idle) ||             (GNUNET_YES == test_mode) ) +      {          /* Possibly more to on reserves, go for it immediately */ +        GNUNET_assert (NULL == task);          task = GNUNET_SCHEDULER_add_now (&run_reserve_closures,                                           NULL); +      }        else +      {          /* FIXME(dold): We might want to read the duration to sleep from the config */          /* nothing to do, sleep for a minute and try again */ +        GNUNET_assert (NULL == task);          task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES,                                               &run_aggregation,                                               NULL); +      }      }      return;    } @@ -1451,6 +1465,7 @@ run_aggregation (void *cls)                  "Serialization issue, trying again later!\n");      db_plugin->rollback (db_plugin->cls,                           session); +    GNUNET_assert (NULL == task);      task = GNUNET_SCHEDULER_add_now (&run_aggregation,                                       NULL);      return; @@ -1515,6 +1530,7 @@ run_aggregation (void *cls)                             session);        cleanup_au ();        /* start again */ +      GNUNET_assert (NULL == task);        task = GNUNET_SCHEDULER_add_now (&run_aggregation,                                         NULL);        return; @@ -1531,6 +1547,7 @@ run_aggregation (void *cls)      (void) commit_or_warn (session);      cleanup_au ();      /* start again */ +    GNUNET_assert (NULL == task);      task = GNUNET_SCHEDULER_add_now (&run_aggregation,                                       NULL);      return; @@ -1587,6 +1604,7 @@ run_aggregation (void *cls)      db_plugin->rollback (db_plugin->cls,                           session);      /* start again */ +    GNUNET_assert (NULL == task);      task = GNUNET_SCHEDULER_add_now (&run_aggregation,                                       NULL);      return; @@ -1613,6 +1631,7 @@ run_aggregation (void *cls)      /* try again */      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,                  "Commit issue for prepared wire data; trying again later!\n"); +    GNUNET_assert (NULL == task);      task = GNUNET_SCHEDULER_add_now (&run_aggregation,                                       NULL);      return; @@ -1625,6 +1644,7 @@ run_aggregation (void *cls)      GNUNET_log (GNUNET_ERROR_TYPE_INFO,                  "Preparation complete, switching to transfer mode\n");      /* run alternative task: actually do wire transfer! */ +    GNUNET_assert (NULL == task);      task = GNUNET_SCHEDULER_add_now (&run_transfers,                                       NULL);      return; @@ -1685,6 +1705,7 @@ wire_confirm_cb (void *cls,      if (GNUNET_DB_STATUS_SOFT_ERROR == qs)      {        /* try again */ +      GNUNET_assert (NULL == task);        task = GNUNET_SCHEDULER_add_now (&run_aggregation,                                         NULL);      } @@ -1703,6 +1724,7 @@ wire_confirm_cb (void *cls,    {    case GNUNET_DB_STATUS_SOFT_ERROR:      /* try again */ +    GNUNET_assert (NULL == task);      task = GNUNET_SCHEDULER_add_now (&run_aggregation,                                       NULL);      return; @@ -1716,6 +1738,7 @@ wire_confirm_cb (void *cls,                  "Wire transfer complete\n");      /* continue with #run_transfers(), just to guard         against the unlikely case that there are more. */ +    GNUNET_assert (NULL == task);      task = GNUNET_SCHEDULER_add_now (&run_transfers,                                       NULL);      return; @@ -1846,6 +1869,7 @@ run_transfers (void *cls)      return;    case GNUNET_DB_STATUS_SOFT_ERROR:      /* try again */ +    GNUNET_assert (NULL == task);      task = GNUNET_SCHEDULER_add_now (&run_transfers,                                       NULL);      return; @@ -1853,6 +1877,7 @@ run_transfers (void *cls)      /* no more prepared wire transfers, go back to aggregation! */      GNUNET_log (GNUNET_ERROR_TYPE_INFO,                  "No more pending wire transfers, starting aggregation\n"); +    GNUNET_assert (NULL == task);      task = GNUNET_SCHEDULER_add_now (&run_aggregation,                                       NULL);      return; @@ -1898,6 +1923,7 @@ run (void *cls,      return;    } +  GNUNET_assert (NULL == task);    task = GNUNET_SCHEDULER_add_now (&run_transfers,                                     NULL);    GNUNET_SCHEDULER_add_shutdown (&shutdown_task, @@ -1917,6 +1943,8 @@ main (int argc,        char *const *argv)  {    struct GNUNET_GETOPT_CommandLineOption options[] = { +    GNUNET_GETOPT_option_timetravel ('T', +                                     "timetravel"),      GNUNET_GETOPT_option_flag ('t',                                 "test",                                 "run in test mode and exit when idle",  | 
