summaryrefslogtreecommitdiff
path: root/lib/rpmdb.c
diff options
context:
space:
mode:
authorPanu Matilainen <pmatilai@redhat.com>2009-09-16 15:36:44 +0300
committerPanu Matilainen <pmatilai@redhat.com>2009-09-16 15:47:11 +0300
commitf3d2c4a9f92ffc399cf8ed5bebdac1531081ffd9 (patch)
treeb00bb2632655a7c4ce73214b408f35ac42736c5e /lib/rpmdb.c
parentc339c3614484642b178716b0ccca88bb6ad3c20c (diff)
downloadrpm-f3d2c4a9f92ffc399cf8ed5bebdac1531081ffd9.tar.gz
Remove db environment on close on chrooted operations
- As we open the db from outside the chroot, the environment ends up containing paths that are not valid once we enter the chroot causing dumb issues like RhBug:513699 and RhBug:507309. - We'd be better off removing the environment always after access but limiting to chroots for now as the rpmdb open/close path is full of races when environment is not present. Chroots are somewhat special environemnts anyway and typically not concurrently accessed so it's less of an issue there. - While this still has all sorts of issues, it at least leaves the rpmdb in chroot in a functional state after initial install.
Diffstat (limited to 'lib/rpmdb.c')
-rw-r--r--lib/rpmdb.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/rpmdb.c b/lib/rpmdb.c
index 890b674cc..1b3772365 100644
--- a/lib/rpmdb.c
+++ b/lib/rpmdb.c
@@ -916,7 +916,8 @@ rpmdb newRpmdb(const char * root,
}
db->db_root = rpmGetPath((root && *root) ? root : _DB_ROOT, NULL);
db->db_errpfx = rpmExpand( (epfx && *epfx ? epfx : _DB_ERRPFX), NULL);
- db->db_remove_env = 0;
+ /* XXX remove environment after chrooted operations, for now... */
+ db->db_remove_env = (!rstreq(db->db_root, "/") ? 1 : 0);
db->db_filter_dups = _db_filter_dups;
db->db_ndbi = dbiTags.max;
db->_dbi = xcalloc(db->db_ndbi, sizeof(*db->_dbi));