diff options
author | Chantry Xavier <shiningxc@gmail.com> | 2007-07-09 17:02:29 +0200 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2007-08-16 17:08:17 +0200 |
commit | ee977019e39fe33a508a60abe4a3ad7eff819b74 (patch) | |
tree | 31d12be64448f6fab2e015f6fcba5055d1321cf4 /lib/libalpm/alpm.c | |
parent | 47cada81a0a8fdd4c77645233ed8406b829b552c (diff) | |
download | pacman-ee977019e39fe33a508a60abe4a3ad7eff819b74.tar.gz pacman-ee977019e39fe33a508a60abe4a3ad7eff819b74.tar.xz |
libalpm/db.c : add alpm_db_unregister_all.
This basically moves the code from alpm_release, which was mostly about
unregistering all databases, to a safer alpm_db_unregister_all.
This allows to avoid modifying the dbs_sync list while iterating over it,
and and also prevent alpm_release from looping infinitely when a database
can't be unregistered.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Diffstat (limited to 'lib/libalpm/alpm.c')
-rw-r--r-- | lib/libalpm/alpm.c | 16 |
1 files changed, 2 insertions, 14 deletions
diff --git a/lib/libalpm/alpm.c b/lib/libalpm/alpm.c index e3ad211d..20d4a746 100644 --- a/lib/libalpm/alpm.c +++ b/lib/libalpm/alpm.c @@ -62,24 +62,12 @@ int SYMEXPORT alpm_initialize(void) */ int SYMEXPORT alpm_release(void) { - int dbs_left = 0; - ALPM_LOG_FUNC; ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); - /* close local database */ - if(handle->db_local) { - alpm_db_unregister(handle->db_local); - handle->db_local = NULL; - } - /* and also sync ones */ - while((dbs_left = alpm_list_count(handle->dbs_sync)) > 0) { - pmdb_t *db = (pmdb_t *)handle->dbs_sync->data; - _alpm_log(PM_LOG_DEBUG, "removing DB %s, %d remaining...", - db->treename, dbs_left); - alpm_db_unregister(db); - db = NULL; + if(alpm_db_unregister_all() == -1) { + return(-1); } _alpm_handle_free(handle); |