--- /dev/null
+/*
+Copyright (C) 2010 by Intra2net AG - Thomas Jarosch
+
+The software in this package is distributed under the GNU General
+Public License version 2 (with a special exception described below).
+
+A copy of GNU General Public License (GPL) is included in this distribution,
+in the file COPYING.GPL.
+
+As a special exception, if other files instantiate templates or use macros
+or inline functions from this file, or you compile this file and link it
+with other works to produce a work based on this file, this file
+does not by itself cause the resulting work to be covered
+by the GNU General Public License.
+
+However the source code for this file must still be made available
+in accordance with section (3) of the GNU General Public License.
+
+This exception does not invalidate any other reasons why a work based
+on this file might be covered by the GNU General Public License.
+*/
+#ifndef __LIBT2N_TEST_FIXTURES
+#define __LIBT2N_TEST_FIXTURES
+
+#include <sys/wait.h>
+#include <sys/types.h>
+#include <signal.h>
+
+class KillChildOnShutdownFixture
+{
+protected:
+ pid_t child_pid;
+
+public:
+ KillChildOnShutdownFixture()
+ : child_pid(0)
+ {
+ // Work around Boost.test reporting killed childs as "fatal error".
+ // Can be ignored with boost 1.40.0+, need to check after upgrade
+ signal(SIGCHLD, SIG_IGN);
+ }
+
+ ~KillChildOnShutdownFixture()
+ {
+ // make sure the server-child is dead before the next test runs
+ if (child_pid)
+ {
+ // std::cout << "Killing child with pid: " << child_pid << std::endl;
+ kill(child_pid, SIGKILL);
+
+ int status = 0;
+ waitpid(child_pid, &status, 0);
+ }
+ }
+};
+
+#endif