A new user interface for you! Read more...

File dbrointerruptable.diff of Package rpm.SLE_11

Do not block signals if the database is opened read-only, it jst
annoys the users. [#48026]

Index: rpmdb/rpmdb.c
===================================================================
--- rpmdb/rpmdb.c.orig
+++ rpmdb/rpmdb.c
@@ -873,10 +873,12 @@ int rpmdbClose(rpmdb db)
     rpmdb * prev, next;
     int dbix;
     int rc = 0;
+    int dbmode;
 
     if (db == NULL)
 	goto exit;
 
+    dbmode = db->db_mode;
     (void) rpmdbUnlink(db, "rpmdbClose");
 
     /*@-usereleased@*/
@@ -913,12 +915,14 @@ int rpmdbClose(rpmdb db)
     /*@-refcounttrans@*/ db = _free(db); /*@=refcounttrans@*/
     /*@=usereleased@*/
 
+    if ((dbmode & (O_RDWR|O_WRONLY)) != 0) {
+	(void) rpmsqEnable(-SIGHUP,	NULL);
+	(void) rpmsqEnable(-SIGINT,	NULL);
+	(void) rpmsqEnable(-SIGTERM,NULL);
+	(void) rpmsqEnable(-SIGQUIT,NULL);
+	(void) rpmsqEnable(-SIGPIPE,NULL);
+    }
 exit:
-    (void) rpmsqEnable(-SIGHUP,	NULL);
-    (void) rpmsqEnable(-SIGINT,	NULL);
-    (void) rpmsqEnable(-SIGTERM,NULL);
-    (void) rpmsqEnable(-SIGQUIT,NULL);
-    (void) rpmsqEnable(-SIGPIPE,NULL);
     return rc;
 }
 /*@=incondefs@*/
@@ -1050,11 +1054,13 @@ static int openDatabase(/*@null@*/ const
     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 ((db->db_mode & (O_RDWR|O_WRONLY)) != 0) {
+	(void) rpmsqEnable(SIGHUP,	NULL);
+	(void) rpmsqEnable(SIGINT,	NULL);
+	(void) rpmsqEnable(SIGTERM,NULL);
+	(void) rpmsqEnable(SIGQUIT,NULL);
+	(void) rpmsqEnable(SIGPIPE,NULL);
+    }
 
     db->db_api = _dbapi;