rpms/rpm/devel rpm-4.4.2.1-checkterminate-noexit.patch, NONE, 1.1 rpm.spec, 1.239, 1.240

Panu Matilainen (pmatilai) fedora-extras-commits at redhat.com
Sat Jul 21 12:28:38 UTC 2007


Author: pmatilai

Update of /cvs/pkgs/rpms/rpm/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv1048

Modified Files:
	rpm.spec 
Added Files:
	rpm-4.4.2.1-checkterminate-noexit.patch 
Log Message:
- dont mess up python exit codes


rpm-4.4.2.1-checkterminate-noexit.patch:

--- NEW FILE rpm-4.4.2.1-checkterminate-noexit.patch ---
changeset:   6179:fb37e4dccbf3
tag:         tip
user:        Panu Matilainen <pmatilai at redhat.com>
date:        Sat Jul 21 15:05:19 2007 +0300
files:       python/rpmmodule.c rpmdb/rpmdb.c rpmdb/rpmdb.h
description:
Make rpmdbCheckTerminate() non-terminating.
This allows use in exit handler without affecting exit code, and permits
caller to do its own cleanup if necessary.


diff -r e9ced408b17f -r fb37e4dccbf3 python/rpmmodule.c
--- a/python/rpmmodule.c	Fri Jul 20 11:23:11 2007 +0300
+++ b/python/rpmmodule.c	Sat Jul 21 15:05:19 2007 +0300
@@ -229,8 +229,6 @@ static PyMethodDef rpmModuleMethods[] = 
 
 /*
 * Force clean up of open iterators and dbs on exit.
-* This ends up calling exit() while we're already exiting but exit
-* handlers will only get called once so it wont loop.
 */
 static void rpm_exithook(void)
 {
diff -r e9ced408b17f -r fb37e4dccbf3 rpmdb/rpmdb.c
--- a/rpmdb/rpmdb.c	Fri Jul 20 11:23:11 2007 +0300
+++ b/rpmdb/rpmdb.c	Sat Jul 21 15:05:19 2007 +0300
@@ -707,7 +707,7 @@ int rpmdbCheckTerminate(int terminate)
     sigset_t newMask, oldMask;
     static int terminating = 0;
 
-    if (terminating) return 0;
+    if (terminating) return 1;
 
     (void) sigfillset(&newMask);		/* block all signals */
     (void) sigprocmask(SIG_BLOCK, &newMask, &oldMask);
@@ -724,10 +724,6 @@ int rpmdbCheckTerminate(int terminate)
 	rpmdb db;
 	rpmdbMatchIterator mi;
 
-/*@-abstract@*/ /* sigset_t is abstract type */
-	rpmMessage(RPMMESS_DEBUG, "Exiting on signal(0x%lx) ...\n", *((unsigned long *)&rpmsqCaught));
-/*@=abstract@*/
-
 /*@-branchstate@*/
 	while ((mi = rpmmiRock) != NULL) {
 /*@i@*/	    rpmmiRock = mi->mi_next;
@@ -743,14 +739,20 @@ int rpmdbCheckTerminate(int terminate)
 	    (void) rpmdbClose(db);
 	}
 /*@=newreftrans@*/
+    }
+    sigprocmask(SIG_SETMASK, &oldMask, NULL);
+    return terminating;
+}
+
+int rpmdbCheckSignals(void)
+{
+    if (rpmdbCheckTerminate(0)) {
+/*@-abstract@*/ /* sigset_t is abstract type */
+	rpmMessage(RPMMESS_DEBUG, "Exiting on signal(0x%lx) ...\n", *((unsigned long *)&rpmsqCaught));
 	exit(EXIT_FAILURE);
-    }
-    return sigprocmask(SIG_SETMASK, &oldMask, NULL);
-}
-
-int rpmdbCheckSignals(void)
-{
-    return rpmdbCheckTerminate(0);
+/*@=abstract@*/
+    }
+    return 0;
 }
 
 /**
diff -r e9ced408b17f -r fb37e4dccbf3 rpmdb/rpmdb.h
--- a/rpmdb/rpmdb.h	Fri Jul 20 11:23:11 2007 +0300
+++ b/rpmdb/rpmdb.h	Sat Jul 21 15:05:19 2007 +0300
@@ -1039,8 +1039,7 @@ Header rpmdbNextIterator(/*@null@*/ rpmd
 	/*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/;
 
 /** \ingroup rpmdb
- * Check rpmdb signal handler for trapped signal exit. Just a compatibility
- * wrapper for rpmdbCheckTerminate()
+ * Check for and exit on termination signals.
  */
 /*@mayexit@*/
 int rpmdbCheckSignals(void)
@@ -1048,10 +1047,13 @@ int rpmdbCheckSignals(void)
 	/*@modifies fileSystem, internalState @*/;
 
 /** \ingroup rpmdb
- * Check rpmdb signal handler for trapped signal or requested exit.
+ * Check rpmdb signal handler for trapped signal and/or requested exit,
+ * clean up any open iterators and databases on termination condition.
+ * On non-zero exit any open references to rpmdb are invalid and cannot
+ * be accessed anymore, calling process should terminate immediately.
  * @param terminate	0 to only check for signals, 1 to terminate anyway
- */
-/*@mayexit@*/
+ * @return 		0 to continue, 1 if termination cleanup was done.
+ */
 int rpmdbCheckTerminate(int terminate);
 
 /** \ingroup rpmdb



Index: rpm.spec
===================================================================
RCS file: /cvs/pkgs/rpms/rpm/devel/rpm.spec,v
retrieving revision 1.239
retrieving revision 1.240
diff -u -r1.239 -r1.240
--- rpm.spec	20 Jul 2007 11:01:18 -0000	1.239
+++ rpm.spec	21 Jul 2007 12:28:06 -0000	1.240
@@ -14,7 +14,7 @@
 Name: rpm
 Version: 4.4.2.1
 %{expand: %%define rpm_version %{version}-rc3}
-Release: 0.5.rc3
+Release: 0.6.rc3
 Group: System Environment/Base
 Url: http://www.rpm.org/
 Source: rpm-%{rpm_version}.tar.gz
@@ -27,6 +27,7 @@
 Patch7: rpm-4.4.2.1-checksignals.patch
 Patch8: rpm-4.4.2.1-checkterminate.patch
 Patch9: rpm-4.4.2.1-python-exithook.patch
+Patch10: rpm-4.4.2.1-checkterminate-noexit.patch
 License: GPL
 Requires(pre): shadow-utils
 Requires(postun): shadow-utils
@@ -140,6 +141,7 @@
 %patch7 -p1 -b .checksignals
 %patch8 -p1 -b .checkterminate
 %patch9 -p1 -b .py-exithook
+%patch10 -p1 -b .checkterminate-noexit
 
 %build
 
@@ -436,6 +438,9 @@
 %{__includedir}/popt.h
 
 %changelog
+* Sat Jul 21 2007 Panu Matilainen <pmatilai at redhat.com> 4.4.2.1-0.6.rc3
+- dont mess up python exit codes
+
 * Fri Jul 20 2007 Panu Matilainen <pmatilai at redhat.com> 4.4.2.1-0.5.rc3
 - require logrotate (#248629)
 - allow checking for pending signals from python (#181434)




More information about the scm-commits mailing list