mirror of
https://github.com/brl/mutter.git
synced 2024-11-29 11:30:45 -05:00
main: use glib to handle sigterm
We can remove a lot of code with that
This commit is contained in:
parent
1fdb161f54
commit
c3a08ee589
@ -56,6 +56,7 @@
|
|||||||
#include <meta/prefs.h>
|
#include <meta/prefs.h>
|
||||||
#include <meta/compositor.h>
|
#include <meta/compositor.h>
|
||||||
|
|
||||||
|
#include <glib-unix.h>
|
||||||
#include <glib-object.h>
|
#include <glib-object.h>
|
||||||
#include <gdk/gdkx.h>
|
#include <gdk/gdkx.h>
|
||||||
|
|
||||||
@ -328,23 +329,8 @@ meta_finalize (void)
|
|||||||
CurrentTime); /* I doubt correct timestamps matter here */
|
CurrentTime); /* I doubt correct timestamps matter here */
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sigterm_pipe_fds[2] = { -1, -1 };
|
|
||||||
|
|
||||||
static void
|
|
||||||
sigterm_handler (int signum)
|
|
||||||
{
|
|
||||||
if (sigterm_pipe_fds[1] >= 0)
|
|
||||||
{
|
|
||||||
int G_GNUC_UNUSED dummy;
|
|
||||||
|
|
||||||
dummy = write (sigterm_pipe_fds[1], "", 1);
|
|
||||||
close (sigterm_pipe_fds[1]);
|
|
||||||
sigterm_pipe_fds[1] = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
on_sigterm (void)
|
on_sigterm (gpointer user_data)
|
||||||
{
|
{
|
||||||
meta_quit (META_EXIT_SUCCESS);
|
meta_quit (META_EXIT_SUCCESS);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -361,8 +347,7 @@ meta_init (void)
|
|||||||
{
|
{
|
||||||
struct sigaction act;
|
struct sigaction act;
|
||||||
sigset_t empty_mask;
|
sigset_t empty_mask;
|
||||||
GIOChannel *channel;
|
|
||||||
|
|
||||||
sigemptyset (&empty_mask);
|
sigemptyset (&empty_mask);
|
||||||
act.sa_handler = SIG_IGN;
|
act.sa_handler = SIG_IGN;
|
||||||
act.sa_mask = empty_mask;
|
act.sa_mask = empty_mask;
|
||||||
@ -376,20 +361,7 @@ meta_init (void)
|
|||||||
g_strerror (errno));
|
g_strerror (errno));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (pipe (sigterm_pipe_fds) != 0)
|
g_unix_signal_add (SIGTERM, on_sigterm, NULL);
|
||||||
g_printerr ("Failed to create SIGTERM pipe: %s\n",
|
|
||||||
g_strerror (errno));
|
|
||||||
|
|
||||||
channel = g_io_channel_unix_new (sigterm_pipe_fds[0]);
|
|
||||||
g_io_channel_set_flags (channel, G_IO_FLAG_NONBLOCK, NULL);
|
|
||||||
g_io_add_watch (channel, G_IO_IN, (GIOFunc) on_sigterm, NULL);
|
|
||||||
g_io_channel_set_close_on_unref (channel, TRUE);
|
|
||||||
g_io_channel_unref (channel);
|
|
||||||
|
|
||||||
act.sa_handler = &sigterm_handler;
|
|
||||||
if (sigaction (SIGTERM, &act, NULL) < 0)
|
|
||||||
g_printerr ("Failed to register SIGTERM handler: %s\n",
|
|
||||||
g_strerror (errno));
|
|
||||||
|
|
||||||
meta_debug_init ();
|
meta_debug_init ();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user