summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Gregory <andrew.gregory.8@gmail.com>2014-01-06 17:52:24 +0100
committerAllan McRae <allan@archlinux.org>2014-01-30 05:02:31 +0100
commitfac9ac6c4011ff643b7335c7381f6219b07bba80 (patch)
treefaba525f6d3dcc40237928127b31d3e7c850fae5
parent4d68092e2fd8c8a3b6da39e509ad48db0fc9ed7a (diff)
downloadpacman-fac9ac6c4011ff643b7335c7381f6219b07bba80.tar.gz
pacman-fac9ac6c4011ff643b7335c7381f6219b07bba80.tar.xz
sync_prepare: manually set pm_errno
_alpm_resolvedeps resets pm_errno to 0 by calling alpm_checkdeps. Whenever the last call succeeded, pm_errno was not properly set, preventing pacman from properly handling the error and leaking additional memory. We know pm_errno should be ALPM_ERR_UNSATISFIED_DEPS if resolvedeps has failed, so just set it manually. Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com> Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--lib/libalpm/sync.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index f1add246..4a76438e 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -442,7 +442,6 @@ int _alpm_sync_prepare(alpm_handle_t *handle, alpm_list_t **data)
see if they'd like to ignore them rather than failing the sync */
if(unresolvable != NULL) {
int remove_unresolvable = 0;
- alpm_errno_t saved_err = handle->pm_errno;
QUESTION(handle, ALPM_QUESTION_REMOVE_PKGS, unresolvable,
NULL, NULL, &remove_unresolvable);
if(remove_unresolvable) {
@@ -458,7 +457,7 @@ int _alpm_sync_prepare(alpm_handle_t *handle, alpm_list_t **data)
}
} else {
/* pm_errno was set by resolvedeps, callback may have overwrote it */
- handle->pm_errno = saved_err;
+ handle->pm_errno = ALPM_ERR_UNSATISFIED_DEPS;
alpm_list_free(resolved);
ret = -1;
goto cleanup;