diff options
author | Christian Grothoff <christian@grothoff.org> | 2021-08-05 20:48:28 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2021-08-05 20:48:34 +0200 |
commit | bd7e44720b212defebb7df47f85d5f393b2cb108 (patch) | |
tree | 9f7c5a030a3565dfae40f926bda3af0c3f08de48 | |
parent | 289b816e1cd1a56a0b82582b69bff22c55e6b8a0 (diff) | |
download | exchange-bd7e44720b212defebb7df47f85d5f393b2cb108.tar.xz |
-proper fix for endless loop on IPC permission trouble
-rw-r--r-- | src/util/crypto_helper_denom.c | 12 | ||||
-rw-r--r-- | src/util/crypto_helper_esign.c | 10 |
2 files changed, 19 insertions, 3 deletions
diff --git a/src/util/crypto_helper_denom.c b/src/util/crypto_helper_denom.c index f55d2cd82..168699b4e 100644 --- a/src/util/crypto_helper_denom.c +++ b/src/util/crypto_helper_denom.c @@ -434,6 +434,7 @@ TALER_CRYPTO_helper_denom_poll (struct TALER_CRYPTO_DenominationHelper *dh) { char buf[UINT16_MAX]; ssize_t ret; + unsigned int retry_limit = 10; const struct GNUNET_MessageHeader *hdr = (const struct GNUNET_MessageHeader *) buf; int flag = MSG_DONTWAIT; @@ -462,11 +463,18 @@ TALER_CRYPTO_helper_denom_poll (struct TALER_CRYPTO_DenominationHelper *dh) GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Restarting connection to RSA helper, did not come up properly\n"); do_disconnect (dh); + if (0 == retry_limit) + return; /* give up */ try_connect (dh); if (-1 == dh->sock) return; /* give up */ + retry_limit--; + flag = MSG_DONTWAIT; + } + else + { + flag = 0; /* syscall must be non-blocking this time */ } - flag = 0; /* syscall must be non-blocking this time */ continue; /* try again */ } GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, @@ -474,7 +482,7 @@ TALER_CRYPTO_helper_denom_poll (struct TALER_CRYPTO_DenominationHelper *dh) do_disconnect (dh); return; } - + retry_limit = 10; flag = MSG_DONTWAIT; if ( (ret < sizeof (struct GNUNET_MessageHeader)) || (ret != ntohs (hdr->size)) ) diff --git a/src/util/crypto_helper_esign.c b/src/util/crypto_helper_esign.c index f98faae2c..29891d754 100644 --- a/src/util/crypto_helper_esign.c +++ b/src/util/crypto_helper_esign.c @@ -391,6 +391,7 @@ TALER_CRYPTO_helper_esign_poll (struct TALER_CRYPTO_ExchangeSignHelper *esh) { char buf[UINT16_MAX]; ssize_t ret; + unsigned int retry_limit = 10; const struct GNUNET_MessageHeader *hdr = (const struct GNUNET_MessageHeader *) buf; int flag = MSG_DONTWAIT; @@ -417,11 +418,18 @@ TALER_CRYPTO_helper_esign_poll (struct TALER_CRYPTO_ExchangeSignHelper *esh) GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Restarting connection to EdDSA helper, did not come up properly\n"); do_disconnect (esh); + if (0 == retry_limit) + return; /* give up */ try_connect (esh); if (-1 == esh->sock) return; /* give up */ + retry_limit--; + flag = MSG_DONTWAIT; + } + else + { + flag = 0; /* syscall must be non-blocking this time */ } - flag = 0; /* syscall must be non-blocking this time */ continue; /* try again */ } GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, |