RPM Package Manager, CVS Repository
http://rpm5.org/cvs/
____________________________________________________________________________
Server: rpm5.org Name: Alexey Tourbin
Root: /v/rpm/cvs Email: at@rpm5.org
Module: rpm Date: 18-Aug-2008 18:56:55
Branch: HEAD Handle: 2008081816565500
Modified files:
rpm CHANGES
rpm/rpmdb rpmdb.c
Log:
rpmdb.c: enable/disable rpmsq signal handlers with respect to
rpmdbRock
Summary:
Revision Changes Path
1.2523 +1 -0 rpm/CHANGES
1.264 +30 -16 rpm/rpmdb/rpmdb.c
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.2522 -r1.2523 CHANGES
--- rpm/CHANGES 17 Aug 2008 20:43:58 -0000 1.2522
+++ rpm/CHANGES 18 Aug 2008 16:56:55 -0000 1.2523
@@ -1,5 +1,6 @@
5.1.0 -> 5.2a0:
+ - at: rpmdb.c: enable/disable rpmsq signal handlers with respect to rpmdbRock
- jbj: WR: run-time discovered configuration goopiness, take 1.
- jbj: WR: rely on PATH to find pkg-config.
- jbj: WR: don't spew error messages with internal lua shadow module.
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/rpmdb.c
============================================================================
$ cvs diff -u -r1.263 -r1.264 rpmdb.c
--- rpm/rpmdb/rpmdb.c 18 Aug 2008 06:16:08 -0000 1.263
+++ rpm/rpmdb/rpmdb.c 18 Aug 2008 16:56:55 -0000 1.264
@@ -1017,13 +1017,13 @@
int rc = 0;
if (db == NULL)
- goto exit;
+ return rc;
(void) rpmdbUnlink(db, "rpmdbClose");
/*@-usereleased@*/
if (db->nrefs > 0)
- goto exit;
+ return rc;
if (db->_dbi)
for (dbix = db->db_ndbi; dbix;) {
@@ -1055,15 +1055,20 @@
}
/*@=newreftrans@*/
+ if (rpmdbRock == NULL && rpmmiRock == NULL) {
+ /* Last close uninstalls special signal handling. */
+ (void) rpmsqEnable(-SIGHUP, NULL);
+ (void) rpmsqEnable(-SIGINT, NULL);
+ (void) rpmsqEnable(-SIGTERM, NULL);
+ (void) rpmsqEnable(-SIGQUIT, NULL);
+ (void) rpmsqEnable(-SIGPIPE, NULL);
+ /* Pending signals strike here. */
+ (void) rpmdbCheckSignals();
+ }
+
/*@-refcounttrans@*/ db = _free(db); /*@=refcounttrans@*/
/*@=usereleased@*/
-exit:
- (void) rpmsqEnable(-SIGHUP, NULL);
- (void) rpmsqEnable(-SIGINT, NULL);
- (void) rpmsqEnable(-SIGTERM,NULL);
- (void) rpmsqEnable(-SIGQUIT,NULL);
- (void) rpmsqEnable(-SIGPIPE,NULL);
return rc;
}
/*@=incondefs@*/
@@ -1229,11 +1234,19 @@
if (db == NULL)
return 1;
- (void) rpmsqEnable(SIGHUP, NULL);
- (void) rpmsqEnable(SIGINT, NULL);
- (void) rpmsqEnable(SIGTERM, NULL);
- (void) rpmsqEnable(SIGQUIT, NULL);
- (void) rpmsqEnable(SIGPIPE, NULL);
+ if (rpmdbRock == NULL && rpmmiRock == NULL) {
+ /* First open installs special signal handling. */
+ (void) rpmsqEnable(SIGHUP, NULL);
+ (void) rpmsqEnable(SIGINT, NULL);
+ (void) rpmsqEnable(SIGTERM, NULL);
+ (void) rpmsqEnable(SIGQUIT, NULL);
+ (void) rpmsqEnable(SIGPIPE, NULL);
+ }
+
+/*@-assignexpose -newreftrans@*/
+/*@i@*/ db->db_next = rpmdbRock;
+ rpmdbRock = db;
+/*@=assignexpose =newreftrans@*/
db->db_api = _dbapi;
@@ -1289,8 +1302,6 @@
xx = rpmdbClose(db);
else {
/*@-assignexpose -newreftrans@*/
-/*@i@*/ db->db_next = rpmdbRock;
- rpmdbRock = db;
/*@i@*/ *dbp = db;
/*@=assignexpose =newreftrans@*/
}
@@ -1962,7 +1973,10 @@
mi->mi_set = dbiFreeIndexSet(mi->mi_set);
mi->mi_keyp = _free(mi->mi_keyp);
- mi->mi_db = rpmdbUnlink(mi->mi_db, "matchIterator");
+ /* XXX rpmdbUnlink will not do.
+ * NB: must be called after rpmmiRock cleanup. */
+ (void) rpmdbClose(mi->mi_db);
+ mi->mi_db = NULL;
mi = _free(mi);
@@ .
Received on Mon Aug 18 18:56:55 2008