From e3f7083b3eb39ed28eee27b6104a3a508437c929 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 9 Aug 2018 20:51:42 +0200 Subject: [PATCH] fix KS state freeing on exit --- .../.config/taler/account-2.json | 4 ++-- src/exchange/taler-exchange-httpd.c | 1 + src/exchange/taler-exchange-httpd_keystate.c | 23 +++++++++++++------ src/exchange/taler-exchange-httpd_keystate.h | 7 ++++++ 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/benchmark/exchange_benchmark_home/.config/taler/account-2.json b/src/benchmark/exchange_benchmark_home/.config/taler/account-2.json index aa7256a82..b2160e99c 100644 --- a/src/benchmark/exchange_benchmark_home/.config/taler/account-2.json +++ b/src/benchmark/exchange_benchmark_home/.config/taler/account-2.json @@ -1,5 +1,5 @@ { "url": "payto://x-taler-bank/localhost:8082/2", - "salt": "KZCTEHKD39TDK9CR9DYHNA5C6RYK1QYCBE1Z0198PBXKK1XTJ3D06CE3Q2QD4ZCED5H16RB9V79QBP5VQ7QRCST36CC4H9P2WAYBMGR", - "master_sig": "55PBWD75WS0S9CKMGKXQPX9R22YM7CS3AARYXZ2GNZJ76EXB63DX9JY3NWWB4PHAZWRKS54VCHYT8HAYNSX294C0CC7XPQF1Y3Y1628" + "salt": "S8SBYSZE4CAWMJRWGMS25XYVSVM6KXN4BJYZ34M975MPDDXZ01WAZEMB2139G8VVD8K6FVCR3GSZKNGEQ76XX27HQSM1PPX54SCFYER", + "master_sig": "J0DHVTAPFB3MY6RRVBX0WGKK7K32XZ7HPKR5JBB6GSQ29AXXFTWM8A1P7STBGKT14YQMYAM4X4EM8GD4FKNDR1MVGK6ANMQYCP9WE0G" } \ No newline at end of file diff --git a/src/exchange/taler-exchange-httpd.c b/src/exchange/taler-exchange-httpd.c index e80ee5a72..71e5c8b53 100644 --- a/src/exchange/taler-exchange-httpd.c +++ b/src/exchange/taler-exchange-httpd.c @@ -1046,6 +1046,7 @@ main (int argc, MHD_stop_daemon (mhd); break; } + TEH_KS_free (); TALER_EXCHANGEDB_plugin_unload (TEH_plugin); TEH_VALIDATION_done (); return (GNUNET_SYSERR == ret) ? 1 : 0; diff --git a/src/exchange/taler-exchange-httpd_keystate.c b/src/exchange/taler-exchange-httpd_keystate.c index 987a938fc..4d1f8888f 100644 --- a/src/exchange/taler-exchange-httpd_keystate.c +++ b/src/exchange/taler-exchange-httpd_keystate.c @@ -1841,8 +1841,8 @@ TEH_KS_loop (void) if (0 != pipe (reload_pipe)) { - fprintf (stderr, - "Failed to create pipe.\n"); + GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, + "pipe"); return GNUNET_SYSERR; } sigusr1 = GNUNET_SIGNAL_handler_install (SIGUSR1, @@ -1915,11 +1915,6 @@ read_again: break; } } - if (NULL != internal_key_state) - { - TEH_KS_release (internal_key_state); - internal_key_state = NULL; - } GNUNET_SIGNAL_handler_uninstall (sigusr1); GNUNET_SIGNAL_handler_uninstall (sigterm); GNUNET_SIGNAL_handler_uninstall (sigint); @@ -1929,6 +1924,20 @@ read_again: } +/** + * Finally release #internal_key_state. + */ +void +TEH_KS_free () +{ + if (NULL != internal_key_state) + { + TEH_KS_release (internal_key_state); + internal_key_state = NULL; + } +} + + /** * Sign the message in @a purpose with the exchange's signing key. * diff --git a/src/exchange/taler-exchange-httpd_keystate.h b/src/exchange/taler-exchange-httpd_keystate.h index c332182e0..29e8cd50c 100644 --- a/src/exchange/taler-exchange-httpd_keystate.h +++ b/src/exchange/taler-exchange-httpd_keystate.h @@ -77,6 +77,13 @@ TEH_KS_release_ (const char *location, #define TEH_KS_release(key_state) TEH_KS_release_ (__FUNCTION__, key_state) +/** + * Finally, release #internal_key_state. + */ +void +TEH_KS_free (void); + + /** * Denomination key lookups can be for signing of fresh coins * or to validate signatures on existing coins. As the validity