[pacman-dev] [PATCH] libalpm: free trans before databases
Allan McRae
allan at archlinux.org
Fri Jan 31 03:28:30 UTC 2020
On 20/1/20 5:18 am, morganamilo wrote:
> When releasing the handle, alpm tries to do some self clean up by
> freeing the databases and transaction.
>
> However, databases refuse to unregister is there is an in progress
> transaction. Causing them to leak if the handle is released while
> a transaction is active.
>
So... I've been sitting on this for a while. It does not seem the
right answer to the issue to me. But I am not sure what the right
answer is!
Suggestions inline below.
> diff --git a/lib/libalpm/alpm.c b/lib/libalpm/alpm.c
> index 1a378db9..02b8fc9b 100644
> --- a/lib/libalpm/alpm.c
> +++ b/lib/libalpm/alpm.c
> @@ -30,6 +30,7 @@
> #include "alpm_list.h"
> #include "handle.h"
> #include "log.h"
> +#include "trans.h"
> #include "util.h"
>
> /** \addtogroup alpm_interface Interface Functions
> @@ -114,6 +115,8 @@ int SYMEXPORT alpm_release(alpm_handle_t *myhandle)
>
> CHECK_HANDLE(myhandle, return -1);
>
> + _alpm_trans_free(myhandle->trans);
> +
Could we do an alpm_trans_release() here if handle->trans is non-null
and abort if that fails?
> /* close local database */
> db = myhandle->db_local;
> if(db) {
> diff --git a/lib/libalpm/handle.c b/lib/libalpm/handle.c
> index e3193f40..1e42f4a8 100644
> --- a/lib/libalpm/handle.c
> +++ b/lib/libalpm/handle.c
> @@ -34,7 +34,6 @@
> #include "alpm_list.h"
> #include "util.h"
> #include "log.h"
> -#include "trans.h"
> #include "alpm.h"
> #include "deps.h"
>
> @@ -74,7 +73,6 @@ void _alpm_handle_free(alpm_handle_t *handle)
> #endif
>
> /* free memory */
> - _alpm_trans_free(handle->trans);
This needs to stay. It is unexpected that _alpm_handle_free does not
free its whole memory.
> FREE(handle->root);
> FREE(handle->dbpath);
> FREE(handle->dbext);
>
More information about the pacman-dev
mailing list