[PATCH] abrt-action-save-package-data: properly close rpm database. Closes #674.

Denys Vlasenko dvlasenk at redhat.com
Fri Jul 19 15:24:17 UTC 2013


RPM library uses Berkeley DB, which emits warnings like this
if DB files weren't closed properly:

 BDB2053 Freeing read locks for locker 0x1e0: 28718/139661746636736

This change fixes it.

Signed-off-by: Denys Vlasenko <dvlasenk at redhat.com>
---
 src/daemon/abrt-action-save-package-data.c | 8 ++++++--
 src/daemon/rpm.c                           | 8 +++++++-
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/daemon/abrt-action-save-package-data.c b/src/daemon/abrt-action-save-package-data.c
index c209c4b..f1a3385 100644
--- a/src/daemon/abrt-action-save-package-data.c
+++ b/src/daemon/abrt-action-save-package-data.c
@@ -426,6 +426,10 @@ int main(int argc, char **argv)
         rpm_load_gpgkey((char*)li->data);
     }
 
-    return SavePackageDescriptionToDebugDump(dump_dir_name);
-    /* can call rpm_destroy but do we really need to bother? we are exiting! */
+    int r = SavePackageDescriptionToDebugDump(dump_dir_name);
+
+    /* Close RPM database */
+    rpm_destroy();
+
+    return r;
 }
diff --git a/src/daemon/rpm.c b/src/daemon/rpm.c
index a1f9532..1b7d660 100644
--- a/src/daemon/rpm.c
+++ b/src/daemon/rpm.c
@@ -61,9 +61,15 @@ void rpm_init()
 
 void rpm_destroy()
 {
-    rpmFreeRpmrc();
     rpmFreeCrypto();
     rpmFreeMacros(NULL);
+    rpmFreeRpmrc();
+
+    /* RPM doc says "clean up any open iterators and databases".
+     * Observed to eliminate these Berkeley DB warnings:
+     * "BDB2053 Freeing read locks for locker 0x1e0: 28718/139661746636736"
+     */
+    rpmdbCheckTerminate(1);
 
     list_free_with_free(list_fingerprints);
     list_fingerprints = NULL;
-- 
1.8.1.4



More information about the Crash-catcher mailing list