fix: release transaction lock before unregistering syncdbs

Message ID 20211120050939.53411-1-kevr@0cost.org
State Superseded, archived
Headers show
Series fix: release transaction lock before unregistering syncdbs | expand

Commit Message

Kevin Morris Nov. 20, 2021, 5:09 a.m. UTC
Signed-off-by: Kevin Morris <kevr@0cost.org>
---
`alpm_unregister_all_syncdbs` errors out when a transaction is held.
Since this function closes transactions as-is, moving this call below
the transaction unlock step solves issues that `pyalpm` sees when
it cleans up the handle.

 lib/libalpm/alpm.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

Comments

Andrew Gregory Nov. 20, 2021, 7:11 a.m. UTC | #1
On 11/19/21 at 09:09pm, Kevin Morris via pacman-dev wrote:
> Signed-off-by: Kevin Morris <kevr@0cost.org>
> ---
> `alpm_unregister_all_syncdbs` errors out when a transaction is held.
> Since this function closes transactions as-is, moving this call below
> the transaction unlock step solves issues that `pyalpm` sees when
> it cleans up the handle.
> 
>  lib/libalpm/alpm.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/lib/libalpm/alpm.c b/lib/libalpm/alpm.c
> index 6708e202..1c38feb8 100644
> --- a/lib/libalpm/alpm.c
> +++ b/lib/libalpm/alpm.c
> @@ -107,10 +107,6 @@ int SYMEXPORT alpm_release(alpm_handle_t *myhandle)
>  		myhandle->db_local = NULL;
>  	}
>  
> -	if(alpm_unregister_all_syncdbs(myhandle) == -1) {
> -		ret = -1;
> -	}
> -
>  #ifdef HAVE_LIBCURL
>  	curl_multi_cleanup(myhandle->curlm);
>  	curl_global_cleanup();
> @@ -118,6 +114,11 @@ int SYMEXPORT alpm_release(alpm_handle_t *myhandle)
>  #endif
>  
>  	_alpm_handle_unlock(myhandle);
> +
> +	if(alpm_unregister_all_syncdbs(myhandle) == -1) {
> +		ret = -1;
> +	}
> +
>  	_alpm_handle_free(myhandle);
>  
>  	return ret;

I don't see how this fixes the issue.  All you've done is move
alpm_unregister_all_syncdbs under _alpm_handle_unlock, but _alpm_handle_unlock
doesn't clear the transaction.

Patch

diff --git a/lib/libalpm/alpm.c b/lib/libalpm/alpm.c
index 6708e202..1c38feb8 100644
--- a/lib/libalpm/alpm.c
+++ b/lib/libalpm/alpm.c
@@ -107,10 +107,6 @@  int SYMEXPORT alpm_release(alpm_handle_t *myhandle)
 		myhandle->db_local = NULL;
 	}
 
-	if(alpm_unregister_all_syncdbs(myhandle) == -1) {
-		ret = -1;
-	}
-
 #ifdef HAVE_LIBCURL
 	curl_multi_cleanup(myhandle->curlm);
 	curl_global_cleanup();
@@ -118,6 +114,11 @@  int SYMEXPORT alpm_release(alpm_handle_t *myhandle)
 #endif
 
 	_alpm_handle_unlock(myhandle);
+
+	if(alpm_unregister_all_syncdbs(myhandle) == -1) {
+		ret = -1;
+	}
+
 	_alpm_handle_free(myhandle);
 
 	return ret;