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

Reply via email to