If the user opted not to remove the unresolvable packages from the
transaction, the list wasn't saved to the transaction to be free'd in
trans_release.

Signed-off-by: Andrew Gregory <[email protected]>
---
 lib/libalpm/sync.c | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index 4ae01ac..b6061db 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -370,7 +370,6 @@ int _alpm_sync_prepare(alpm_handle_t *handle, alpm_list_t 
**data)
 {
        alpm_list_t *i, *j;
        alpm_list_t *deps = NULL;
-       alpm_list_t *unresolvable = NULL;
        size_t from_sync = 0;
        int ret = 0;
        alpm_trans_t *trans = handle->trans;
@@ -427,7 +426,11 @@ int _alpm_sync_prepare(alpm_handle_t *handle, alpm_list_t 
**data)
                        alpm_pkg_t *pkg = i->data;
                        if(_alpm_resolvedeps(handle, localpkgs, pkg, trans->add,
                                                &resolved, remove, data) == -1) 
{
-                               unresolvable = alpm_list_add(unresolvable, pkg);
+                               /* Unresolvable packages will be removed from 
the target list; set
+                                * these aside in the transaction as a list we 
won't operate on. If we
+                                * free them before the end of the transaction, 
we may kill pointers
+                                * the frontend holds to package objects. */
+                               trans->unresolvable = 
alpm_list_add(trans->unresolvable, pkg);
                        }
                        /* Else, [resolved] now additionally contains [pkg] and 
all of its
                           dependencies not already on the list */
@@ -437,10 +440,10 @@ int _alpm_sync_prepare(alpm_handle_t *handle, alpm_list_t 
**data)
 
                /* If there were unresolvable top-level packages, prompt the 
user to
                   see if they'd like to ignore them rather than failing the 
sync */
-               if(unresolvable != NULL) {
+               if(trans->unresolvable != NULL) {
                        int remove_unresolvable = 0;
                        alpm_errno_t saved_err = handle->pm_errno;
-                       QUESTION(handle, ALPM_QUESTION_REMOVE_PKGS, 
unresolvable,
+                       QUESTION(handle, ALPM_QUESTION_REMOVE_PKGS, 
trans->unresolvable,
                                        NULL, NULL, &remove_unresolvable);
                        if(remove_unresolvable) {
                                /* User wants to remove the unresolvable 
packages from the
@@ -470,12 +473,6 @@ int _alpm_sync_prepare(alpm_handle_t *handle, alpm_list_t 
**data)
                        }
                }
 
-               /* Unresolvable packages will be removed from the target list; 
set these
-                * aside in the transaction as a list we won't operate on. If 
we free them
-                * before the end of the transaction, we may kill pointers the 
frontend
-                * holds to package objects. */
-               trans->unresolvable = unresolvable;
-
                alpm_list_free(trans->add);
                trans->add = resolved;
 
-- 
1.8.5.2


Reply via email to