[X2Go-Commits] [x2goclient] 02/44: unixhelper.{cpp, h}: implement cleanup program for process group.

git-admin at x2go.org git-admin at x2go.org
Sun May 3 23:41:58 CEST 2015


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch bugfix/osx
in repository x2goclient.

commit 2ca38884daf02f05827dbc5522f6fbfd76c4bba1
Author: Mihai Moldovan <ionic at ionic.de>
Date:   Sat Mar 14 23:57:49 2015 +0100

    unixhelper.{cpp,h}: implement cleanup program for process group.
---
 debian/changelog   |    1 +
 src/unixhelper.cpp |   38 ++++++++++++++++++++++++++++++++++++++
 src/unixhelper.h   |    9 +++++++++
 3 files changed, 48 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 1979edc..c761ad7 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -349,6 +349,7 @@ x2goclient (4.0.4.0-0x2go1) UNRELEASED; urgency=low
     - {configdialog.{cpp,h},onmainwindow.cpp}: miscellaneous typo fixes - no
       functional changes.
     - {unixhelper.{cpp,h},x2goclient.pro{,.maemo}}: add unixhelper stub.
+    - unixhelper.{cpp,h}: implement cleanup program for process group.
 
   [ Fernando Pedemonte ]
   * New upstream release (4.0.4.0):
diff --git a/src/unixhelper.cpp b/src/unixhelper.cpp
index 221bdb2..545c2c1 100644
--- a/src/unixhelper.cpp
+++ b/src/unixhelper.cpp
@@ -19,5 +19,43 @@
 
 #ifdef Q_OS_UNIX
 
+#include <csignal>
+#include <unistd.h>
+#include <iostream>
+#include <cstring>
+#include <cerrno>
+#include <cstdlib>
+
+#include "unixhelper.h"
+
+void unixhelper::kill_pgroup (int signal) {
+  if (SIGHUP == signal) {
+    /* Try to kill via SIGTERM first. */
+    if (0 != killpg (getpgrp (), SIGTERM)) {
+      std::cerr << "WARNING: unable to send SIGTERM to process group: " << std::strerror (errno) << std::endl;
+    }
+
+    /* Grant a grace period of (at least) 5 seconds. */
+    sleep (5);
+
+    /* Don't handle any errors here, because we die anyway. */
+    killpg (getpgrp (), SIGKILL);
+  }
+}
+
+
+int unixhelper::unix_cleanup () {
+  if (SIG_ERR == std::signal (SIGTERM, SIG_IGN)) {
+    std::cerr << "Unable to ignore SIGTERM: " << std::strerror (errno) << std::endl;
+    std::exit (1);
+  }
+
+  std::signal (SIGHUP, kill_pgroup);
+
+  /* Sleep forever... at least one second in each run. */
+  for (;;) {
+    sleep (1);
+  }
+}
 
 #endif /* defined (Q_OS_UNIX) */
diff --git a/src/unixhelper.h b/src/unixhelper.h
index 31d983e..fab611e 100644
--- a/src/unixhelper.h
+++ b/src/unixhelper.h
@@ -22,7 +22,16 @@
 #ifndef UNIXHELPER_H
 #define UNIXHELPER_H
 
+class unixhelper {
+  public:
+    unixhelper () {}
+    ~unixhelper () {}
+    unix_cleanup ();
 
+  private:
+    unixhelper (const unixhelper &other);
+    void kill_pgroup (int signal);
+};
 
 #endif /* !defined (UNIXHELPER_H) */
 

--
Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git


More information about the x2go-commits mailing list