[sysprof/wip/chergert/sysprof-3] tools: use g_unix_signal_add() instead of eventfd
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sysprof/wip/chergert/sysprof-3] tools: use g_unix_signal_add() instead of eventfd
- Date: Fri, 17 May 2019 18:04:11 +0000 (UTC)
commit 52e77cf64efa18758f6f83c35db3a3178d4b07ed
Author: Christian Hergert <chergert redhat com>
Date: Fri May 17 11:02:59 2019 -0700
tools: use g_unix_signal_add() instead of eventfd
This will do basically the same thing, but be more convenient for us and
less likely to error.
src/tools/sysprof-cli.c | 42 ++++++++++--------------------------------
1 file changed, 10 insertions(+), 32 deletions(-)
---
diff --git a/src/tools/sysprof-cli.c b/src/tools/sysprof-cli.c
index 0dc2f2f..fc42e05 100644
--- a/src/tools/sysprof-cli.c
+++ b/src/tools/sysprof-cli.c
@@ -21,6 +21,7 @@
#include "config.h"
#include <fcntl.h>
+#include <glib-unix.h>
#include <glib/gi18n.h>
#include <glib/gstdio.h>
#include <signal.h>
@@ -32,42 +33,26 @@
static GMainLoop *main_loop;
static SysprofProfiler *profiler;
-static int efd = -1;
static int exit_code = EXIT_SUCCESS;
-static void
-signal_handler (int signum)
-{
- gint64 val = 1;
-
- write (efd, &val, sizeof val);
-}
-
static gboolean
-dispatch (GSource *source,
- GSourceFunc callback,
- gpointer callback_data)
+sigint_handler (gpointer user_data)
{
- sysprof_profiler_stop (profiler);
g_main_loop_quit (main_loop);
return G_SOURCE_REMOVE;
}
-static GSourceFuncs source_funcs = {
- NULL, NULL, dispatch, NULL
-};
-
static void
profiler_stopped (SysprofProfiler *profiler_,
- GMainLoop *main_loop_)
+ GMainLoop *main_loop_)
{
g_main_loop_quit (main_loop_);
}
static void
-profiler_failed (SysprofProfiler *profiler_,
- const GError *reason,
- GMainLoop *main_loop_)
+profiler_failed (SysprofProfiler *profiler_,
+ const GError *reason,
+ GMainLoop *main_loop_)
{
g_assert (SYSPROF_IS_PROFILER (profiler_));
g_assert (reason != NULL);
@@ -86,7 +71,6 @@ main (gint argc,
GOptionContext *context;
const gchar *filename = "capture.syscap";
GError *error = NULL;
- GSource *gsource;
gchar *command = NULL;
gboolean no_memory = FALSE;
gboolean no_cpu = FALSE;
@@ -107,6 +91,9 @@ main (gint argc,
sysprof_clock_init ();
+ g_unix_signal_add (SIGINT, sigint_handler, main_loop);
+ g_unix_signal_add (SIGTERM, sigint_handler, main_loop);
+
context = g_option_context_new (_("[CAPTURE_FILE] — Sysprof"));
g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
@@ -135,14 +122,8 @@ main (gint argc,
return EXIT_FAILURE;
}
- efd = eventfd (0, O_CLOEXEC);
-
main_loop = g_main_loop_new (NULL, FALSE);
- gsource = g_source_new (&source_funcs, sizeof (GSource));
- g_source_add_unix_fd (gsource, efd, G_IO_IN);
- g_source_attach (gsource, NULL);
-
profiler = sysprof_local_profiler_new ();
g_signal_connect (profiler,
@@ -233,9 +214,6 @@ main (gint argc,
sysprof_profiler_add_pid (profiler, pid);
}
- signal (SIGINT, signal_handler);
- signal (SIGTERM, signal_handler);
-
sysprof_profiler_start (profiler);
/* Restore the process if we stopped it */
@@ -250,7 +228,7 @@ main (gint argc,
while (g_main_context_pending (main_context))
g_main_context_iteration (main_context, FALSE);
- close (efd);
+ sysprof_capture_writer_flush (writer);
g_clear_pointer (&writer, sysprof_capture_writer_unref);
g_clear_object (&profiler);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]