summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2021-05-30 11:49:08 +0200
committerJens Georg <mail@jensge.org>2021-06-09 23:55:54 +0200
commit433d1c1cb9fb4773a3ccda412b782d8b70c372b6 (patch)
tree5f458bee4c1a01a83a08edddd3b13b227c9e0009
parent859f5dbf69b9624dd2fb332a8f983530ae040a64 (diff)
downloadgupnp-433d1c1cb9fb4773a3ccda412b782d8b70c372b6.tar.gz
tests: Use g_unix_signal_add
We were using illegal functions in the Unix signal handler For windows, keep on using sigint for now. Perhaps moving to SetCtrlHandler might be an option: https://docs.microsoft.com/en-us/windows/console/registering-a-control-handler-function
-rw-r--r--meson.build2
-rw-r--r--tests/meson.build2
-rw-r--r--tests/test-browsing.c29
-rw-r--r--tests/test-introspection.c44
-rw-r--r--tests/test-proxy.c30
-rw-r--r--tests/test-server.c32
-rw-r--r--tests/test-white-list.c29
7 files changed, 118 insertions, 50 deletions
diff --git a/meson.build b/meson.build
index 443ccc3..48667b8 100644
--- a/meson.build
+++ b/meson.build
@@ -25,6 +25,8 @@ guul = subproject('guul', default_options : ['default_library=static'])
gssdp_dep = dependency('gssdp-1.2', version : '>= 1.2.3', default_options: ['sniffer=false'])
+gio_unix = dependency('gio-unix-2.0', version: '>= 2.44', required: host_machine.system() != 'windows')
+
dependencies = [
dependency('glib-2.0', version : '>= ' + glib_version),
dependency('gio-2.0', version : '>= ' + glib_version),
diff --git a/tests/meson.build b/tests/meson.build
index 61b91bc..c27a3f5 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -2,7 +2,7 @@ foreach program : ['browsing', 'proxy', 'server', 'introspection', 'white-list']
executable(
'test-' + program,
sources : 'test-@0@.c'.format(program),
- dependencies : gupnp
+ dependencies : [gupnp, gio_unix]
)
endforeach
diff --git a/tests/test-browsing.c b/tests/test-browsing.c
index 89b6169..1dd4560 100644
--- a/tests/test-browsing.c
+++ b/tests/test-browsing.c
@@ -28,12 +28,31 @@
GMainLoop *main_loop;
+#ifndef G_OS_WIN32
+#include <glib-unix.h>
+#endif
+
+static gboolean
+unix_signal_handler (gpointer user_data)
+{
+ g_main_loop_quit (main_loop);
+
+ return G_SOURCE_REMOVE;
+}
+
+
+#ifdef G_OS_WIN32
+/*
+ * Since in Windows this is basically called from
+ * the ConsoleCtrlHandler which does not share the restrictions of Unix signals
+ */
static void
interrupt_signal_handler (G_GNUC_UNUSED int signum)
{
- g_main_loop_quit (main_loop);
+ unix_signal_handler (NULL);
}
+#endif
static void
device_proxy_available_cb (G_GNUC_UNUSED GUPnPControlPoint *cp,
GUPnPDeviceProxy *proxy)
@@ -96,9 +115,6 @@ main (G_GNUC_UNUSED int argc, G_GNUC_UNUSED char **argv)
GError *error;
GUPnPContext *context;
GUPnPControlPoint *cp;
-#ifndef G_OS_WIN32
- struct sigaction sig_action;
-#endif /* G_OS_WIN32 */
setlocale (LC_ALL, "");
@@ -137,10 +153,7 @@ main (G_GNUC_UNUSED int argc, G_GNUC_UNUSED char **argv)
main_loop = g_main_loop_new (NULL, FALSE);
#ifndef G_OS_WIN32
- /* Hook the handler for SIGTERM */
- memset (&sig_action, 0, sizeof (sig_action));
- sig_action.sa_handler = interrupt_signal_handler;
- sigaction (SIGINT, &sig_action, NULL);
+ g_unix_signal_add (SIGINT, unix_signal_handler, NULL);
#else
signal(SIGINT, interrupt_signal_handler);
#endif /* G_OS_WIN32 */
diff --git a/tests/test-introspection.c b/tests/test-introspection.c
index bd24869..1512317 100644
--- a/tests/test-introspection.c
+++ b/tests/test-introspection.c
@@ -28,22 +28,42 @@
#include <signal.h>
#include <glib.h>
+#ifndef G_OS_WIN32
+#include <glib-unix.h>
+#endif
+
GMainLoop *main_loop;
static GCancellable *cancellable;
-static void
-interrupt_signal_handler (G_GNUC_UNUSED int signum)
+static gboolean
+unix_signal_handler (gpointer user_data)
{
if (g_cancellable_is_cancelled (cancellable)) {
g_main_loop_quit (main_loop);
+
+ return G_SOURCE_REMOVE;
} else {
g_print ("Canceling all introspection calls. "
- "Press ^C again to quit.\n");
+ "Press ^C again to force quit.\n");
g_cancellable_cancel (cancellable);
+ return G_SOURCE_CONTINUE;
}
}
+#ifdef G_OS_WIN32
+/*
+ * Since in Windows this is basically called from
+ * the ConsoleCtrlHandler which does not share the restrictions of Unix signals
+ */
+static void
+interrupt_signal_handler (G_GNUC_UNUSED int signum)
+{
+ unix_signal_handler (NULL);
+}
+
+#endif
+
static void
print_action_arguments (GList *argument_list)
{
@@ -101,7 +121,7 @@ print_state_variables (GUPnPServiceIntrospection *introspection)
g_print ("state variables:\n");
for (iter = variables; iter; iter = iter->next) {
GUPnPServiceStateVariableInfo *variable;
- GValue default_value;
+ GValue default_value = G_VALUE_INIT;
const char * default_value_str;
variable = (GUPnPServiceStateVariableInfo *) iter->data;
@@ -113,7 +133,6 @@ print_state_variables (GUPnPServiceIntrospection *introspection)
g_type_name (variable->type),
variable->send_events? "yes": "no");
- memset (&default_value, 0, sizeof (GValue));
g_value_init (&default_value, G_TYPE_STRING);
g_value_transform (&variable->default_value,
&default_value);
@@ -125,11 +144,7 @@ print_state_variables (GUPnPServiceIntrospection *introspection)
g_value_unset (&default_value);
if (variable->is_numeric) {
- GValue min, max, step;
-
- memset (&min, 0, sizeof (GValue));
- memset (&max, 0, sizeof (GValue));
- memset (&step, 0, sizeof (GValue));
+ GValue min = G_VALUE_INIT, max = G_VALUE_INIT, step = G_VALUE_INIT;
g_value_init (&min, G_TYPE_STRING);
g_value_init (&max, G_TYPE_STRING);
@@ -225,9 +240,6 @@ main (int argc, char **argv)
GError *error = NULL;
GUPnPContext *context;
GUPnPControlPoint *cp;
-#ifndef G_OS_WIN32
- struct sigaction sig_action;
-#endif /* G_OS_WIN32 */
error = NULL;
context = g_initable_new (GUPNP_TYPE_CONTEXT, NULL, &error, NULL);
@@ -257,11 +269,9 @@ main (int argc, char **argv)
main_loop = g_main_loop_new (NULL, FALSE);
- /* Hook the handler for SIGTERM */
+ /* Hook the handler for SIGINT */
#ifndef G_OS_WIN32
- memset (&sig_action, 0, sizeof (sig_action));
- sig_action.sa_handler = interrupt_signal_handler;
- sigaction (SIGINT, &sig_action, NULL);
+ g_unix_signal_add (SIGINT, unix_signal_handler, NULL);
#else
signal(SIGINT,interrupt_signal_handler);
#endif /* G_OS_WIN32 */
diff --git a/tests/test-proxy.c b/tests/test-proxy.c
index 77530e7..bbf44d6 100644
--- a/tests/test-proxy.c
+++ b/tests/test-proxy.c
@@ -28,12 +28,31 @@
GMainLoop *main_loop;
+#ifndef G_OS_WIN32
+#include <glib-unix.h>
+#endif
+
+static gboolean
+unix_signal_handler (gpointer user_data)
+{
+ g_main_loop_quit (main_loop);
+
+ return G_SOURCE_REMOVE;
+}
+
+#ifdef G_OS_WIN32
+/*
+ * Since in Windows this is basically called from
+ * the ConsoleCtrlHandler which does not share the restrictions of Unix signals
+ */
static void
interrupt_signal_handler (G_GNUC_UNUSED int signum)
{
- g_main_loop_quit (main_loop);
+ unix_signal_handler (NULL);
}
+#endif
+
static void
subscription_lost_cb (G_GNUC_UNUSED GUPnPServiceProxy *proxy,
const GError *reason,
@@ -166,9 +185,6 @@ main (G_GNUC_UNUSED int argc, G_GNUC_UNUSED char **argv)
GError *error;
GUPnPContext *context;
GUPnPControlPoint *cp;
-#ifndef G_OS_WIN32
- struct sigaction sig_action;
-#endif /* G_OS_WIN32 */
setlocale (LC_ALL, "");
@@ -201,11 +217,9 @@ main (G_GNUC_UNUSED int argc, G_GNUC_UNUSED char **argv)
/* Hook the handler for SIGTERM */
#ifndef G_OS_WIN32
- memset (&sig_action, 0, sizeof (sig_action));
- sig_action.sa_handler = interrupt_signal_handler;
- sigaction (SIGINT, &sig_action, NULL);
+ g_unix_signal_add (SIGINT, unix_signal_handler, NULL);
#else
- signal(SIGINT,interrupt_signal_handler);
+ signal(SIGINT, interrupt_signal_handler);
#endif /* G_OS_WIN32 */
g_main_loop_run (main_loop);
diff --git a/tests/test-server.c b/tests/test-server.c
index 53d704b..940f8d9 100644
--- a/tests/test-server.c
+++ b/tests/test-server.c
@@ -26,14 +26,35 @@
#include <string.h>
#include <signal.h>
+
+#ifndef G_OS_WIN32
+#include <glib-unix.h>
+#endif
+
GMainLoop *main_loop;
+static gboolean
+unix_signal_handler (gpointer user_data)
+{
+ g_main_loop_quit (main_loop);
+
+ return G_SOURCE_REMOVE;
+}
+
+
+#ifdef G_OS_WIN32
+/*
+ * Since in Windows this is basically called from
+ * the ConsoleCtrlHandler which does not share the restrictions of Unix signals
+ */
static void
interrupt_signal_handler (G_GNUC_UNUSED int signum)
{
- g_main_loop_quit (main_loop);
+ unix_signal_handler (NULL);
}
+#endif
+
static void
notify_failed_cb (G_GNUC_UNUSED GUPnPService *service,
G_GNUC_UNUSED const GList *callback_urls,
@@ -62,9 +83,6 @@ main (int argc, char **argv)
GUPnPContext *context;
GUPnPRootDevice *dev;
GUPnPServiceInfo *content_dir;
-#ifndef G_OS_WIN32
- struct sigaction sig_action;
-#endif /* G_OS_WIN32 */
if (argc < 2) {
g_printerr ("Usage: %s DESCRIPTION_FILE\n", argv[0]);
@@ -126,11 +144,9 @@ main (int argc, char **argv)
main_loop = g_main_loop_new (NULL, FALSE);
- /* Hook the handler for SIGTERM */
+ /* Hook the handler for SIGINT */
#ifndef G_OS_WIN32
- memset (&sig_action, 0, sizeof (sig_action));
- sig_action.sa_handler = interrupt_signal_handler;
- sigaction (SIGINT, &sig_action, NULL);
+ g_unix_signal_add (SIGINT, unix_signal_handler, NULL);
#else
signal(SIGINT, interrupt_signal_handler);
#endif /* G_OS_WIN32 */
diff --git a/tests/test-white-list.c b/tests/test-white-list.c
index 037ca1c..7e8624a 100644
--- a/tests/test-white-list.c
+++ b/tests/test-white-list.c
@@ -29,12 +29,31 @@
GMainLoop *main_loop;
+#ifndef G_OS_WIN32
+#include <glib-unix.h>
+#endif
+
+static gboolean
+unix_signal_handler (gpointer user_data)
+{
+ g_main_loop_quit (main_loop);
+
+ return G_SOURCE_REMOVE;
+}
+
+
+#ifdef G_OS_WIN32
+/*
+ * Since in Windows this is basically called from
+ * the ConsoleCtrlHandler which does not share the restrictions of Unix signals
+ */
static void
interrupt_signal_handler (G_GNUC_UNUSED int signum)
{
- g_main_loop_quit (main_loop);
+ unix_signal_handler (NULL);
}
+#endif
static void
device_proxy_available_cb (G_GNUC_UNUSED GUPnPControlPoint *cp,
GUPnPDeviceProxy *proxy)
@@ -246,9 +265,6 @@ main (G_GNUC_UNUSED int argc, G_GNUC_UNUSED char **argv)
{
GUPnPContextManager *cm;
guint id;
-#ifndef G_OS_WIN32
- struct sigaction sig_action;
-#endif /* G_OS_WIN32 */
setlocale (LC_ALL, "");
@@ -269,10 +285,7 @@ main (G_GNUC_UNUSED int argc, G_GNUC_UNUSED char **argv)
id = g_timeout_add_seconds (5, change_white_list, cm);
#ifndef G_OS_WIN32
- /* Hook the handler for SIGTERM */
- memset (&sig_action, 0, sizeof (sig_action));
- sig_action.sa_handler = interrupt_signal_handler;
- sigaction (SIGINT, &sig_action, NULL);
+ g_unix_signal_add (SIGINT, unix_signal_handler, NULL);
#else
signal(SIGINT, interrupt_signal_handler);
#endif /* G_OS_WIN32 */