Support explicitly asking from rpmdb cleanup + termination.
authorPanu Matilainen <pmatilai@redhat.com>
Fri, 20 Jul 2007 08:19:56 +0000 (11:19 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Fri, 20 Jul 2007 08:19:56 +0000 (11:19 +0300)
New rpmdbCheckTerminate() function which checks for termination signals
and allows requesting termination via parameter as well. Make
rpmdbCheckSignals() just a wrapper that calls it with terminate=0.
(transplanted from 6acd7701e4df5e9df29123c2e877f574551cd342)

rpmdb/rpmdb.c
rpmdb/rpmdb.h

index dff9931..2ab5599 100644 (file)
@@ -700,14 +700,14 @@ static rpmdb rpmdbRock;
 /*@unchecked@*/ /*@exposed@*/ /*@null@*/
 static rpmdbMatchIterator rpmmiRock;
 
-int rpmdbCheckSignals(void)
+int rpmdbCheckTerminate(int terminate)
        /*@globals rpmdbRock, rpmmiRock @*/
        /*@modifies rpmdbRock, rpmmiRock @*/
 {
     sigset_t newMask, oldMask;
-    static int terminate = 0;
+    static int terminating = 0;
 
-    if (terminate) return 0;
+    if (terminating) return 0;
 
     (void) sigfillset(&newMask);               /* block all signals */
     (void) sigprocmask(SIG_BLOCK, &newMask, &oldMask);
@@ -716,10 +716,11 @@ int rpmdbCheckSignals(void)
      || sigismember(&rpmsqCaught, SIGQUIT)
      || sigismember(&rpmsqCaught, SIGHUP)
      || sigismember(&rpmsqCaught, SIGTERM)
-     || sigismember(&rpmsqCaught, SIGPIPE))
-       terminate = 1;
+     || sigismember(&rpmsqCaught, SIGPIPE)
+     || terminate)
+       terminating = 1;
 
-    if (terminate) {
+    if (terminating) {
        rpmdb db;
        rpmdbMatchIterator mi;
 
@@ -747,6 +748,11 @@ int rpmdbCheckSignals(void)
     return sigprocmask(SIG_SETMASK, &oldMask, NULL);
 }
 
+int rpmdbCheckSignals(void)
+{
+    return rpmdbCheckTerminate(0);
+}
+
 /**
  * Block all signals, returning previous signal mask.
  */
index d62b637..93ec513 100644 (file)
@@ -1039,7 +1039,8 @@ Header rpmdbNextIterator(/*@null@*/ rpmdbMatchIterator mi)
        /*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/;
 
 /** \ingroup rpmdb
- * Check rpmdb signal handler for trapped signal exit.
+ * Check rpmdb signal handler for trapped signal exit. Just a compatibility
+ * wrapper for rpmdbCheckTerminate()
  */
 /*@mayexit@*/
 int rpmdbCheckSignals(void)
@@ -1047,6 +1048,13 @@ int rpmdbCheckSignals(void)
        /*@modifies fileSystem, internalState @*/;
 
 /** \ingroup rpmdb
+ * Check rpmdb signal handler for trapped signal or requested exit.
+ * @param terminate    0 to only check for signals, 1 to terminate anyway
+ */
+/*@mayexit@*/
+int rpmdbCheckTerminate(int terminate);
+
+/** \ingroup rpmdb
  * Destroy rpm database iterator.
  * @param mi           rpm database iterator
  * @return             NULL always