From: Panu Matilainen Date: Fri, 15 Apr 2011 07:11:41 +0000 (+0300) Subject: Fix dangling databases from iterators (ticket #820) X-Git-Tag: tznext/4.11.0.1.tizen20130304~1209 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3544062a6ed8f165eb773766ed5540b96f1bcc03;p=tools%2Flibrpm-tizen.git Fix dangling databases from iterators (ticket #820) - Call rpmdbClose() instead of rpmdbUnlink() on iterator free to actually close the db when refcount goes to zero. This fixes the situation where a caller closes a database handle while iterators are active: the iterators stay usable and close the db when the last one exits. --- diff --git a/lib/rpmdb.c b/lib/rpmdb.c index 1ff2f29..cf99c56 100644 --- a/lib/rpmdb.c +++ b/lib/rpmdb.c @@ -1276,8 +1276,7 @@ rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi) mi->mi_set = dbiFreeIndexSet(mi->mi_set); mi->mi_keyp = _free(mi->mi_keyp); - /* XXX rpmdbUnlink() should be rpmdbFree() but no such call exists... */ - mi->mi_db = rpmdbUnlink(mi->mi_db); + rpmdbClose(mi->mi_db); mi->mi_ts = rpmtsFree(mi->mi_ts); mi = _free(mi); @@ -2279,7 +2278,7 @@ rpmdbIndexIterator rpmdbIndexIteratorFree(rpmdbIndexIterator ii) xx = dbiCclose(ii->ii_dbi, ii->ii_dbc, 0); ii->ii_dbc = NULL; ii->ii_dbi = NULL; - ii->ii_db = rpmdbUnlink(ii->ii_db); + rpmdbClose(ii->ii_db); ii->ii_set = dbiFreeIndexSet(ii->ii_set); ii = _free(ii);