]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
build: use gnulib pthread_sigmask
authorEric Blake <eblake@redhat.com>
Wed, 6 Jul 2011 14:46:15 +0000 (08:46 -0600)
committerEric Blake <eblake@redhat.com>
Thu, 7 Jul 2011 19:12:44 +0000 (13:12 -0600)
Gnulib finally learned how to do pthread_sigmask on mingw.

* .gnulib: Update to latest, for pthread_sigmask.
* bootstrap.conf (gnulib_modules): Add pthread_sigmask.
* configure.ac (AC_CHECK_FUNCS): Drop redundant check.
* src/rpc/virnetclient.c (virNetClientSetTLSSession)
(virNetClientIOEventLoop): Make code unconditional.
* src/util/command.c (virFork): Likewise.
* tools/virsh.c (doMigrate, cmdMigrate): Likewise.

.gnulib
bootstrap.conf
configure.ac
src/rpc/virnetclient.c
src/util/command.c
tools/virsh.c

diff --git a/.gnulib b/.gnulib
index c3153d2c0cf5f675ae13ae2bd1dee0f463b9c86a..56005a21e8f9f434212a19dcb628c6d3b179fd08 160000 (submodule)
--- a/.gnulib
+++ b/.gnulib
@@ -1 +1 @@
-Subproject commit c3153d2c0cf5f675ae13ae2bd1dee0f463b9c86a
+Subproject commit 56005a21e8f9f434212a19dcb628c6d3b179fd08
index d3ff150607a40e7d4be30b71cca96f9cd6e4aad3..a800534908c335a04be75b066df3389f4e634a71 100644 (file)
@@ -68,6 +68,7 @@ pipe2
 poll
 posix-shell
 pthread
+pthread_sigmask
 recv
 random_r
 sched
index 13b4afbd0c490fc26660c3968709ac37e9244631..aa589d646af723e737cda101535dd18ee81b3648 100644 (file)
@@ -130,7 +130,7 @@ dnl assumed).  Because of $LIB_PTHREAD, we cannot use AC_CHECK_FUNCS_ONCE.
 dnl LIB_PTHREAD was set during gl_INIT by gnulib.
 old_LIBS=$LIBS
 LIBS="$LIBS $LIB_PTHREAD"
-AC_CHECK_FUNCS([pthread_sigmask pthread_mutexattr_init])
+AC_CHECK_FUNCS([pthread_mutexattr_init])
 LIBS=$old_libs
 
 dnl Availability of various common headers (non-fatal if missing).
index 615de6c2c837ebdde8f2493d222976770f9ac453..6a112eea701eced2a26e3db2bb62aedc9f464d3b 100644 (file)
@@ -273,14 +273,16 @@ int virNetClientSetTLSSession(virNetClientPtr client,
     char buf[1];
     int len;
     struct pollfd fds[1];
-#ifdef HAVE_PTHREAD_SIGMASK
     sigset_t oldmask, blockedsigs;
 
     sigemptyset (&blockedsigs);
+#ifdef SIGWINCH
     sigaddset (&blockedsigs, SIGWINCH);
+#endif
+#ifdef SIGCHLD
     sigaddset (&blockedsigs, SIGCHLD);
-    sigaddset (&blockedsigs, SIGPIPE);
 #endif
+    sigaddset (&blockedsigs, SIGPIPE);
 
     virNetClientLock(client);
 
@@ -311,18 +313,14 @@ int virNetClientSetTLSSession(virNetClientPtr client,
          * after the call (RHBZ#567931).  Same for SIGCHLD and SIGPIPE
          * at the suggestion of Paolo Bonzini and Daniel Berrange.
          */
-#ifdef HAVE_PTHREAD_SIGMASK
         ignore_value(pthread_sigmask(SIG_BLOCK, &blockedsigs, &oldmask));
-#endif
 
     repoll:
         ret = poll(fds, ARRAY_CARDINALITY(fds), -1);
         if (ret < 0 && errno == EAGAIN)
             goto repoll;
 
-#ifdef HAVE_PTHREAD_SIGMASK
         ignore_value(pthread_sigmask(SIG_BLOCK, &oldmask, NULL));
-#endif
     }
 
     ret = virNetTLSContextCheckCertificate(tls, client->tls);
@@ -338,19 +336,15 @@ int virNetClientSetTLSSession(virNetClientPtr client,
     fds[0].revents = 0;
     fds[0].events = POLLIN;
 
-#ifdef HAVE_PTHREAD_SIGMASK
     /* Block SIGWINCH from interrupting poll in curses programs */
     ignore_value(pthread_sigmask(SIG_BLOCK, &blockedsigs, &oldmask));
-#endif
 
     repoll2:
     ret = poll(fds, ARRAY_CARDINALITY(fds), -1);
     if (ret < 0 && errno == EAGAIN)
         goto repoll2;
 
-#ifdef HAVE_PTHREAD_SIGMASK
     ignore_value(pthread_sigmask(SIG_BLOCK, &oldmask, NULL));
-#endif
 
     len = virNetTLSSessionRead(client->tls, buf, 1);
     if (len < 0) {
@@ -800,9 +794,7 @@ static int virNetClientIOEventLoop(virNetClientPtr client,
         virNetClientCallPtr tmp = client->waitDispatch;
         virNetClientCallPtr prev;
         char ignore;
-#ifdef HAVE_PTHREAD_SIGMASK
         sigset_t oldmask, blockedsigs;
-#endif
         int timeout = -1;
 
         /* If we have existing SASL decoded data we
@@ -841,22 +833,22 @@ static int virNetClientIOEventLoop(virNetClientPtr client,
          * after the call (RHBZ#567931).  Same for SIGCHLD and SIGPIPE
          * at the suggestion of Paolo Bonzini and Daniel Berrange.
          */
-#ifdef HAVE_PTHREAD_SIGMASK
         sigemptyset (&blockedsigs);
+#ifdef SIGWINCH
         sigaddset (&blockedsigs, SIGWINCH);
+#endif
+#ifdef SIGCHLD
         sigaddset (&blockedsigs, SIGCHLD);
+#endif
         sigaddset (&blockedsigs, SIGPIPE);
         ignore_value(pthread_sigmask(SIG_BLOCK, &blockedsigs, &oldmask));
-#endif
 
     repoll:
         ret = poll(fds, ARRAY_CARDINALITY(fds), timeout);
         if (ret < 0 && errno == EAGAIN)
             goto repoll;
 
-#ifdef HAVE_PTHREAD_SIGMASK
         ignore_value(pthread_sigmask(SIG_SETMASK, &oldmask, NULL));
-#endif
 
         virNetClientLock(client);
 
index 9fdeb0bf198c6217949681012c5c32cf15362980..eae58b25ae277cd849f11e59ff4a514473d552fa 100644 (file)
@@ -145,9 +145,7 @@ static int virClearCapabilities(void)
 
  */
 int virFork(pid_t *pid) {
-# ifdef HAVE_PTHREAD_SIGMASK
     sigset_t oldmask, newmask;
-# endif
     struct sigaction sig_action;
     int saved_errno, ret = -1;
 
@@ -157,7 +155,6 @@ int virFork(pid_t *pid) {
      * Need to block signals now, so that child process can safely
      * kill off caller's signal handlers without a race.
      */
-# ifdef HAVE_PTHREAD_SIGMASK
     sigfillset(&newmask);
     if (pthread_sigmask(SIG_SETMASK, &newmask, &oldmask) != 0) {
         saved_errno = errno;
@@ -165,7 +162,6 @@ int virFork(pid_t *pid) {
                              "%s", _("cannot block signals"));
         goto cleanup;
     }
-# endif
 
     /* Ensure we hold the logging lock, to protect child processes
      * from deadlocking on another thread's inherited mutex state */
@@ -178,11 +174,9 @@ int virFork(pid_t *pid) {
     virLogUnlock();
 
     if (*pid < 0) {
-# ifdef HAVE_PTHREAD_SIGMASK
         /* attempt to restore signal mask, but ignore failure, to
            avoid obscuring the fork failure */
         ignore_value (pthread_sigmask(SIG_SETMASK, &oldmask, NULL));
-# endif
         virReportSystemError(saved_errno,
                              "%s", _("cannot fork child process"));
         goto cleanup;
@@ -192,7 +186,6 @@ int virFork(pid_t *pid) {
 
         /* parent process */
 
-# ifdef HAVE_PTHREAD_SIGMASK
         /* Restore our original signal mask now that the child is
            safely running */
         if (pthread_sigmask(SIG_SETMASK, &oldmask, NULL) != 0) {
@@ -200,7 +193,6 @@ int virFork(pid_t *pid) {
             virReportSystemError(errno, "%s", _("cannot unblock signals"));
             goto cleanup;
         }
-# endif
         ret = 0;
 
     } else {
@@ -237,7 +229,6 @@ int virFork(pid_t *pid) {
             sigaction(i, &sig_action, NULL);
         }
 
-# ifdef HAVE_PTHREAD_SIGMASK
         /* Unmask all signals in child, since we've no idea
            what the caller's done with their signal mask
            and don't want to propagate that to children */
@@ -247,7 +238,6 @@ int virFork(pid_t *pid) {
             virReportSystemError(errno, "%s", _("cannot unblock signals"));
             goto cleanup;
         }
-# endif
         ret = 0;
     }
 
index 9a189fddbf3c6e0b3a1621950c5cd5212750e550..2e776ec2f1225f089110322dc3d454b1f82b3742 100644 (file)
@@ -4400,14 +4400,12 @@ doMigrate (void *opaque)
     const vshCmd *cmd = data->cmd;
     const char *xmlfile = NULL;
     char *xml = NULL;
-#if HAVE_PTHREAD_SIGMASK
     sigset_t sigmask, oldsigmask;
 
     sigemptyset(&sigmask);
     sigaddset(&sigmask, SIGINT);
     if (pthread_sigmask(SIG_BLOCK, &sigmask, &oldsigmask) < 0)
         goto out_sig;
-#endif
 
     if (!vshConnectionUsability (ctl, ctl->conn))
         goto out;
@@ -4483,10 +4481,8 @@ doMigrate (void *opaque)
     }
 
 out:
-#if HAVE_PTHREAD_SIGMASK
     pthread_sigmask(SIG_SETMASK, &oldsigmask, NULL);
 out_sig:
-#endif
     if (dom) virDomainFree (dom);
     VIR_FREE(xml);
     ignore_value(safewrite(data->writefd, &ret, sizeof(ret)));
@@ -4534,12 +4530,10 @@ cmdMigrate (vshControl *ctl, const vshCmd *cmd)
     struct timeval start, curr;
     bool live_flag = false;
     vshCtrlData data;
-#if HAVE_PTHREAD_SIGMASK
     sigset_t sigmask, oldsigmask;
 
     sigemptyset(&sigmask);
     sigaddset(&sigmask, SIGINT);
-#endif
 
     if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return false;
@@ -4631,13 +4625,9 @@ repoll:
         }
 
         if (verbose) {
-#if HAVE_PTHREAD_SIGMASK
             pthread_sigmask(SIG_BLOCK, &sigmask, &oldsigmask);
-#endif
             ret = virDomainGetJobInfo(dom, &jobinfo);
-#if HAVE_PTHREAD_SIGMASK
             pthread_sigmask(SIG_SETMASK, &oldsigmask, NULL);
-#endif
             if (ret == 0)
                 print_job_progress(jobinfo.dataRemaining, jobinfo.dataTotal);
         }