From e1899cbc64c6b634107f09c3a3e8152c63078636 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Mon, 19 Sep 2011 13:18:42 -0500 Subject: Be smarter about running ldconfig during removal transactions 1. Don't run it if something failed in package removal- this mirrors what we already do in sync transactions. 2. Don't run it if we are invoking it for the replaces removal bit of a sync transaction- it doesn't make sense to run ldconfig halfway through a sync install; we should only run it once at the end. Signed-off-by: Dan McGee --- lib/libalpm/remove.c | 14 ++++++++------ lib/libalpm/remove.h | 2 +- lib/libalpm/sync.c | 2 +- lib/libalpm/trans.c | 2 +- 4 files changed, 11 insertions(+), 9 deletions(-) (limited to 'lib/libalpm') diff --git a/lib/libalpm/remove.c b/lib/libalpm/remove.c index c6a3efcb..e998763f 100644 --- a/lib/libalpm/remove.c +++ b/lib/libalpm/remove.c @@ -475,7 +475,7 @@ db: return 0; } -int _alpm_remove_packages(alpm_handle_t *handle) +int _alpm_remove_packages(alpm_handle_t *handle, int run_ldconfig) { alpm_list_t *targ; size_t pkg_count, targ_count; @@ -489,23 +489,25 @@ int _alpm_remove_packages(alpm_handle_t *handle) alpm_pkg_t *pkg = targ->data; if(trans->state == STATE_INTERRUPTED) { - return 0; + return ret; } if(_alpm_remove_single_package(handle, pkg, NULL, targ_count, pkg_count) == -1) { handle->pm_errno = ALPM_ERR_TRANS_ABORT; + /* running ldconfig at this point could possibly screw system */ + run_ldconfig = 0; ret = -1; - goto cleanup; } targ_count++; } - /* run ldconfig if it exists */ - _alpm_ldconfig(handle); + if(run_ldconfig) { + /* run ldconfig if it exists */ + _alpm_ldconfig(handle); + } -cleanup: return ret; } diff --git a/lib/libalpm/remove.h b/lib/libalpm/remove.h index 5da645b0..251e4548 100644 --- a/lib/libalpm/remove.h +++ b/lib/libalpm/remove.h @@ -25,7 +25,7 @@ #include "trans.h" int _alpm_remove_prepare(alpm_handle_t *handle, alpm_list_t **data); -int _alpm_remove_packages(alpm_handle_t *handle); +int _alpm_remove_packages(alpm_handle_t *handle, int run_ldconfig); int _alpm_remove_single_package(alpm_handle_t *handle, alpm_pkg_t *oldpkg, alpm_pkg_t *newpkg, diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index 717ba7ce..c6a79fa0 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -1042,7 +1042,7 @@ int _alpm_sync_commit(alpm_handle_t *handle, alpm_list_t **data) if(replaces) { _alpm_log(handle, ALPM_LOG_DEBUG, "removing conflicting and to-be-replaced packages\n"); /* we want the frontend to be aware of commit details */ - if(_alpm_remove_packages(handle) == -1) { + if(_alpm_remove_packages(handle, 0) == -1) { _alpm_log(handle, ALPM_LOG_ERROR, _("could not commit removal transaction\n")); return -1; } diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c index 47b9c98d..a4716b8a 100644 --- a/lib/libalpm/trans.c +++ b/lib/libalpm/trans.c @@ -164,7 +164,7 @@ int SYMEXPORT alpm_trans_commit(alpm_handle_t *handle, alpm_list_t **data) trans->state = STATE_COMMITING; if(trans->add == NULL) { - if(_alpm_remove_packages(handle) == -1) { + if(_alpm_remove_packages(handle, 1) == -1) { /* pm_errno is set by _alpm_remove_commit() */ return -1; } -- cgit v1.2.3-70-g09d2