summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoss Lagerwall <rosslagerwall@gmail.com>2014-11-05 22:49:23 +0000
committerOndrej Holy <oholy@redhat.com>2016-01-18 20:46:10 +0100
commit35f4e5dccb6aaa818a53bb6b12acb1c1a2f3b465 (patch)
treec7f0c0e66870f72aa283db20c23d62152cac9fd8
parent4af662dce03afbf9cd12f73b17a74cf10f9dd47b (diff)
downloadgvfs-35f4e5dccb6aaa818a53bb6b12acb1c1a2f3b465.tar.gz
daemon: Allow toggling debug output with SIGUSR2
With dbus hooked up to systemd, it can be useful to toggle debug output on/off for a running daemon. Respond to SIGUSR2 by toggling debug output. E.g. to toggle and then watch debug output on a running sftp mount: $ pkill -USR2 gvfsd-sftp $ journalctl -f https://bugzilla.gnome.org/show_bug.cgi?id=740660
-rw-r--r--common/gvfsutils.c39
-rw-r--r--common/gvfsutils.h4
-rw-r--r--daemon/daemon-main.c10
3 files changed, 49 insertions, 4 deletions
diff --git a/common/gvfsutils.c b/common/gvfsutils.c
index 47c31176..1c5c2e3a 100644
--- a/common/gvfsutils.c
+++ b/common/gvfsutils.c
@@ -22,6 +22,7 @@
#include <string.h>
#include <glib.h>
#include <glib/gstdio.h>
+#include <signal.h>
#include "gvfsutils.h"
#ifdef G_OS_UNIX
@@ -30,6 +31,9 @@
#include <unistd.h>
#endif
+/* Indicates whether debug output is enabled. */
+static gboolean debugging = FALSE;
+
/**
* gvfs_randomize_string:
* @str: the string to randomize
@@ -86,3 +90,38 @@ out:
return FALSE;
#endif
}
+
+gboolean
+gvfs_get_debug (void)
+{
+ return debugging;
+}
+
+void
+gvfs_set_debug (gboolean debugging_)
+{
+ debugging = debugging_;
+}
+
+static void
+toggle_debugging (int signum)
+{
+ debugging = !debugging;
+}
+
+/**
+ * gvfs_setup_debugging_handler:
+ *
+ * Sets up a handler for SIGUSR2 that toggles the debugging flag when the
+ * signal is received.
+ **/
+void
+gvfs_setup_debug_handler (void)
+{
+ struct sigaction sa;
+
+ sigemptyset (&sa.sa_mask);
+ sa.sa_handler = toggle_debugging;
+ sa.sa_flags = 0;
+ sigaction (SIGUSR2, &sa, NULL);
+}
diff --git a/common/gvfsutils.h b/common/gvfsutils.h
index edac0b07..2c2146c8 100644
--- a/common/gvfsutils.h
+++ b/common/gvfsutils.h
@@ -26,6 +26,10 @@ void gvfs_randomize_string (char *str,
int len);
gboolean gvfs_have_session_bus (void);
+gboolean gvfs_get_debug (void);
+void gvfs_set_debug (gboolean debugging);
+void gvfs_setup_debug_handler (void);
+
G_END_DECLS
#endif /* __G_VFS_UTILS_H__ */
diff --git a/daemon/daemon-main.c b/daemon/daemon-main.c
index 600921ce..a81313d1 100644
--- a/daemon/daemon-main.c
+++ b/daemon/daemon-main.c
@@ -33,11 +33,11 @@
#include <gvfsdaemon.h>
#include <gvfsbackend.h>
#include <gvfsdbus.h>
+#include <gvfsutils.h>
static char *spawner_id = NULL;
static char *spawner_path = NULL;
-static gboolean print_debug = FALSE;
static gboolean already_acquired = FALSE;
static int process_result = 0;
@@ -50,7 +50,7 @@ log_debug (const gchar *log_domain,
const gchar *message,
gpointer unused_data)
{
- if (print_debug)
+ if (gvfs_get_debug ())
g_print ("%s", message);
}
@@ -68,6 +68,8 @@ daemon_init (void)
g_log_set_handler (NULL, G_LOG_LEVEL_DEBUG, log_debug, NULL);
+ gvfs_setup_debug_handler ();
+
#ifdef SIGPIPE
/* Ignore SIGPIPE to avoid killing daemons on cancelled transfer *
* See https://bugzilla.gnome.org/show_bug.cgi?id=649041 *
@@ -217,13 +219,13 @@ daemon_parse_args (int argc, char *argv[], const char *default_type)
if (argc > 1 && strcmp (argv[1], "--debug") == 0)
{
- print_debug = TRUE;
+ gvfs_set_debug (TRUE);
argc--;
argv++;
}
else if (g_getenv ("GVFS_DEBUG"))
{
- print_debug = TRUE;
+ gvfs_set_debug (TRUE);
}
mount_spec = NULL;