From 712cb4a62171b49c8226d68abd338baf06fae5fd Mon Sep 17 00:00:00 2001 From: Levi Neely <141506390+lneely@users.noreply.github.com> Date: Tue, 4 Mar 2025 18:20:31 +0100 Subject: [PATCH] fucking goto... --- pclsync/pcryptofolder.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/pclsync/pcryptofolder.c b/pclsync/pcryptofolder.c index a18e63c..0945e55 100644 --- a/pclsync/pcryptofolder.c +++ b/pclsync/pcryptofolder.c @@ -1281,19 +1281,21 @@ int pcryptofolder_unlock(const char *password) { * normally deadlock with us holding writelock and waiting for sql_lock. * Therefore we use sql_trylock here. */ -retry: - pthread_rwlock_wrlock(&rwlock); - if (crypto_started_l) { - pthread_rwlock_unlock(&rwlock); - return PRINT_RETURN_CONST(PSYNC_CRYPTO_START_ALREADY_STARTED); - } - rowcnt = 0; - rsapriv = rsapub = salt = NULL; - iterations = 0; - if (psync_sql_trylock()) { - pthread_rwlock_unlock(&rwlock); - psys_sleep_milliseconds(1); - goto retry; + while (1) { + pthread_rwlock_wrlock(&rwlock); + if (crypto_started_l) { + pthread_rwlock_unlock(&rwlock); + return PRINT_RETURN_CONST(PSYNC_CRYPTO_START_ALREADY_STARTED); + } + rowcnt = 0; + rsapriv = rsapub = salt = NULL; + iterations = 0; + if (psync_sql_trylock()) { + pthread_rwlock_unlock(&rwlock); + psys_sleep_milliseconds(1); + continue; + } + break; } res = psync_sql_query_nolock( "SELECT id, value FROM setting WHERE id IN ('crypto_private_key', "