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

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

commit 1f06061a48305770dc6653f568cdc2b36dadef66
Author: Mihai Moldovan <io...@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 df13a8c..bee2bb8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -6,6 +6,7 @@ x2goclient (4.0.5.3-0x2go1) UNRELEASED; urgency=medium
       with a more prominent, bigger settings gear icon. Requested for
       visibility.
     - {unixhelper.{cpp,h},x2goclient.pro{,.maemo}}: add unixhelper stub.
+    - unixhelper.{cpp,h}: implement cleanup program for process group.
 
  -- X2Go Release Manager <git-ad...@x2go.org>  Mon, 19 Sep 2016 09:07:07 +0200
 
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
_______________________________________________
x2go-commits mailing list
x2go-commits@lists.x2go.org
http://lists.x2go.org/listinfo/x2go-commits

Reply via email to