RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: [EMAIL PROTECTED] Module: rpm Date: 21-Jul-2007 00:47:35 Branch: HEAD Handle: 2007072023473401 Modified files: rpm CHANGES devtool.conf rpm/python rpmdb-py.c rpmds-py.c rpmfi-py.c rpmmi-py.c rpmmodule.c rpmps-py.c rpmrc-py.c rpmte-py.c spec-py.c rpm/rpmdb rpmdb.c rpmdb.h Log: - rescuscitate rpm-python, include <rpmio.h> explicitly. - adopt rpm.org signal handling <[EMAIL PROTECTED]> Summary: Revision Changes Path 1.1502 +3 -0 rpm/CHANGES 2.54 +1 -0 rpm/devtool.conf 1.17 +1 -0 rpm/python/rpmdb-py.c 1.33 +1 -0 rpm/python/rpmds-py.c 1.22 +1 -0 rpm/python/rpmfi-py.c 1.19 +1 -0 rpm/python/rpmmi-py.c 1.151 +46 -4 rpm/python/rpmmodule.c 1.9 +1 -0 rpm/python/rpmps-py.c 1.19 +1 -0 rpm/python/rpmrc-py.c 1.21 +1 -0 rpm/python/rpmte-py.c 1.6 +1 -0 rpm/python/spec-py.c 1.137 +12 -6 rpm/rpmdb/rpmdb.c 1.61 +10 -1 rpm/rpmdb/rpmdb.h ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/CHANGES ============================================================================ $ cvs diff -u -r1.1501 -r1.1502 CHANGES --- rpm/CHANGES 20 Jul 2007 17:33:04 -0000 1.1501 +++ rpm/CHANGES 20 Jul 2007 22:47:34 -0000 1.1502 @@ -1,4 +1,7 @@ 4.5 -> 5.0: + - jbj: rescuscitate rpm-python, include <rpmio.h> explicitly. + - jbj: adopt rpm.org signal handling <[EMAIL PROTECTED]> + - jbj: unbreak macros by using [e,ee) and en as count. todo: look fe usage. - jbj: use _macro_BUFSIZ, not compiled in BUFSIZ, to size expansion targets. - jbj: enable %{dirname:...} macro primitive. - jbj: add %{?dir/file} as shorthand for %{?dir:%{dir}/file}. @@ . patch -p0 <<'@@ .' Index: rpm/devtool.conf ============================================================================ $ cvs diff -u -r2.53 -r2.54 devtool.conf --- rpm/devtool.conf 20 Jul 2007 14:09:49 -0000 2.53 +++ rpm/devtool.conf 20 Jul 2007 22:47:34 -0000 2.54 @@ -67,6 +67,7 @@ --with-popt=external \ --with-libelf \ --with-selinux \ + --with-python \ --enable-build-warnings \ --enable-build-pic \ --enable-build-pie \ @@ . patch -p0 <<'@@ .' Index: rpm/python/rpmdb-py.c ============================================================================ $ cvs diff -u -r1.16 -r1.17 rpmdb-py.c --- rpm/python/rpmdb-py.c 25 May 2007 17:36:31 -0000 1.16 +++ rpm/python/rpmdb-py.c 20 Jul 2007 22:47:34 -0000 1.17 @@ -4,6 +4,7 @@ #include "system.h" +#include <rpmio.h> #include <rpmlib.h> #include "rpmdb-py.h" @@ . patch -p0 <<'@@ .' Index: rpm/python/rpmds-py.c ============================================================================ $ cvs diff -u -r1.32 -r1.33 rpmds-py.c --- rpm/python/rpmds-py.c 25 May 2007 17:36:31 -0000 1.32 +++ rpm/python/rpmds-py.c 20 Jul 2007 22:47:34 -0000 1.33 @@ -4,6 +4,7 @@ #include "system.h" +#include <rpmio.h> #include <rpmlib.h> #include "header-py.h" @@ . patch -p0 <<'@@ .' Index: rpm/python/rpmfi-py.c ============================================================================ $ cvs diff -u -r1.21 -r1.22 rpmfi-py.c --- rpm/python/rpmfi-py.c 25 May 2007 17:36:31 -0000 1.21 +++ rpm/python/rpmfi-py.c 20 Jul 2007 22:47:34 -0000 1.22 @@ -4,6 +4,7 @@ #include "system.h" +#include <rpmio.h> #include <rpmlib.h> #include "header-py.h" @@ . patch -p0 <<'@@ .' Index: rpm/python/rpmmi-py.c ============================================================================ $ cvs diff -u -r1.18 -r1.19 rpmmi-py.c --- rpm/python/rpmmi-py.c 25 May 2007 17:36:31 -0000 1.18 +++ rpm/python/rpmmi-py.c 20 Jul 2007 22:47:34 -0000 1.19 @@ -4,6 +4,7 @@ #include "system.h" +#include <rpmio.h> #include <rpmlib.h> #include <rpmdb.h> @@ . patch -p0 <<'@@ .' Index: rpm/python/rpmmodule.c ============================================================================ $ cvs diff -u -r1.150 -r1.151 rpmmodule.c --- rpm/python/rpmmodule.c 6 Jul 2007 19:34:44 -0000 1.150 +++ rpm/python/rpmmodule.c 20 Jul 2007 22:47:34 -0000 1.151 @@ -7,6 +7,7 @@ #include <rpmio_internal.h> #include <rpmcli.h> /* XXX for rpmCheckSig */ #include <rpmdb.h> +#include <rpmsq.h> #include "legacy.h" #include "misc.h" @@ -45,11 +46,35 @@ /** */ -static PyObject * sqCaught(PyObject * self, PyObject * args) +static PyObject * signalsCaught(PyObject * self, PyObject * check) { - if (!PyArg_ParseTuple(args, ":sqCaught")) return NULL; + PyObject *caught, *o; + Py_ssize_t llen; + int signum, i; + sigset_t newMask, oldMask; - return Py_BuildValue("i", rpmsqCaught); + if (!PyList_Check(check)) { + PyErr_SetString(PyExc_TypeError, "list expected"); + return NULL; + } + + llen = PyList_Size(check); + caught = PyList_New(0); + + /* block signals while checking for them */ + (void) sigfillset(&newMask); + (void) sigprocmask(SIG_BLOCK, &newMask, &oldMask); + + for (i = 0; i < llen; i++) { + o = PyList_GetItem(check, i); + signum = PyInt_AsLong(o); + if (sigismember(&rpmsqCaught, signum)) { + PyList_Append(caught, o); + } + } + (void) sigprocmask(SIG_SETMASK, &oldMask, NULL); + + return caught; } /** @@ -149,7 +174,7 @@ { "delMacro", (PyCFunction) rpmrc_DelMacro, METH_VARARGS|METH_KEYWORDS, NULL }, - { "sqCaught", (PyCFunction) sqCaught, METH_VARARGS, + { "signalsCaught", (PyCFunction) signalsCaught, METH_O, NULL }, { "checkSignals", (PyCFunction) checkSignals, METH_VARARGS, NULL }, @@ -185,6 +210,16 @@ { NULL } } ; +/* + * 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) +{ + rpmdbCheckTerminate(1); +} + /** */ static char rpm__doc__[] = @@ -223,6 +258,13 @@ if (m == NULL) return; + /* + * treat error to register rpm cleanup hook as fatal, tracebacks + * can and will leave stale locks around if we can't clean up + */ + if (Py_AtExit(rpm_exithook) == -1) + return; + rpmReadConfigFiles(NULL, NULL); d = PyModule_GetDict(m); @@ . patch -p0 <<'@@ .' Index: rpm/python/rpmps-py.c ============================================================================ $ cvs diff -u -r1.8 -r1.9 rpmps-py.c --- rpm/python/rpmps-py.c 25 May 2007 17:36:31 -0000 1.8 +++ rpm/python/rpmps-py.c 20 Jul 2007 22:47:34 -0000 1.9 @@ -5,6 +5,7 @@ #include "system.h" +#include <rpmio.h> #define _RPMPS_INTERNAL /* XXX rpmps needs iterator */ #include <rpmlib.h> @@ . patch -p0 <<'@@ .' Index: rpm/python/rpmrc-py.c ============================================================================ $ cvs diff -u -r1.18 -r1.19 rpmrc-py.c --- rpm/python/rpmrc-py.c 25 May 2007 17:36:31 -0000 1.18 +++ rpm/python/rpmrc-py.c 20 Jul 2007 22:47:34 -0000 1.19 @@ -6,6 +6,7 @@ #include "structmember.h" +#include <rpmio.h> #include "rpmdebug-py.c" #include <rpmcli.h> @@ . patch -p0 <<'@@ .' Index: rpm/python/rpmte-py.c ============================================================================ $ cvs diff -u -r1.20 -r1.21 rpmte-py.c --- rpm/python/rpmte-py.c 25 May 2007 17:36:31 -0000 1.20 +++ rpm/python/rpmte-py.c 20 Jul 2007 22:47:34 -0000 1.21 @@ -4,6 +4,7 @@ #include "system.h" +#include <rpmio.h> #include <rpmlib.h> #include "header-py.h" /* XXX tagNumFromPyObject */ @@ . patch -p0 <<'@@ .' Index: rpm/python/spec-py.c ============================================================================ $ cvs diff -u -r1.5 -r1.6 spec-py.c --- rpm/python/spec-py.c 25 May 2007 17:36:31 -0000 1.5 +++ rpm/python/spec-py.c 20 Jul 2007 22:47:34 -0000 1.6 @@ -4,6 +4,7 @@ #include "system.h" +#include <rpmio.h> #include "spec-py.h" /** \ingroup python @@ . patch -p0 <<'@@ .' Index: rpm/rpmdb/rpmdb.c ============================================================================ $ cvs diff -u -r1.136 -r1.137 rpmdb.c --- rpm/rpmdb/rpmdb.c 20 Jul 2007 16:23:37 -0000 1.136 +++ rpm/rpmdb/rpmdb.c 20 Jul 2007 22:47:35 -0000 1.137 @@ -683,14 +683,14 @@ /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ static rpmdbMatchIterator rpmmiRock; -int rpmdbCheckSignals(void) +int rpmdbCheckTerminate(int terminate) /[EMAIL PROTECTED] rpmdbRock, rpmmiRock @*/ /[EMAIL PROTECTED] 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); @@ -699,10 +699,11 @@ || 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; @@ -730,6 +731,11 @@ return sigprocmask(SIG_SETMASK, &oldMask, NULL); } +int rpmdbCheckSignals(void) +{ + return rpmdbCheckTerminate(0); +} + /** * Block all signals, returning previous signal mask. * @param db rpm database @@ . patch -p0 <<'@@ .' Index: rpm/rpmdb/rpmdb.h ============================================================================ $ cvs diff -u -r1.60 -r1.61 rpmdb.h --- rpm/rpmdb/rpmdb.h 10 Jul 2007 13:05:33 -0000 1.60 +++ rpm/rpmdb/rpmdb.h 20 Jul 2007 22:47:35 -0000 1.61 @@ -1136,7 +1136,16 @@ /[EMAIL PROTECTED] mi, rpmGlobalMacroContext, fileSystem, internalState @*/; /** \ingroup rpmdb - * Check rpmdb signal handler for trapped signal exit. + * Check rpmdb signal handler for trapped signal, or requested exit. + * @param terminate 0 to only check for signals, 1 to terminate anyway + */ +/[EMAIL PROTECTED]@*/ +int rpmdbCheckTerminate(int terminate) + /[EMAIL PROTECTED] fileSystem, internalState @*/ + /[EMAIL PROTECTED] fileSystem, internalState @*/; + +/** \ingroup rpmdb + * Check rpmdb signal handler for trapped signal and exit. */ /[EMAIL PROTECTED]@*/ int rpmdbCheckSignals(void) @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org