aboutsummaryrefslogtreecommitdiffstats
path: root/src/main_notify.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-12-30 19:24:39 +0100
committerMax Kellermann <max@duempel.org>2008-12-30 19:24:39 +0100
commit71e7ce5d8e3153342494685d60d7ff16d9b29101 (patch)
treeed9893562c16b7f8ab98a5c97bce79bcf1ae2267 /src/main_notify.c
parent03e650aa9e9a95575fccd51ec9f669abae52fe7e (diff)
downloadmpd-71e7ce5d8e3153342494685d60d7ff16d9b29101.tar.gz
mpd-71e7ce5d8e3153342494685d60d7ff16d9b29101.tar.xz
mpd-71e7ce5d8e3153342494685d60d7ff16d9b29101.zip
main: use the GLib main loop
This is a rather huge patch, which unfortunately cannot be splitted. Instead of using our custom ioops.h library, convert everything to use the GLib main loop.
Diffstat (limited to 'src/main_notify.c')
-rw-r--r--src/main_notify.c36
1 files changed, 13 insertions, 23 deletions
diff --git a/src/main_notify.c b/src/main_notify.c
index f821f76aa..e9552efbc 100644
--- a/src/main_notify.c
+++ b/src/main_notify.c
@@ -20,25 +20,15 @@
#include "main_notify.h"
#include "utils.h"
-#include "ioops.h"
#include "log.h"
#include <assert.h>
#include <glib.h>
#include <string.h>
-static struct ioOps main_notify_IO;
static int main_pipe[2];
GThread *main_task;
-static int ioops_fdset(fd_set * rfds,
- G_GNUC_UNUSED fd_set * wfds,
- G_GNUC_UNUSED fd_set * efds)
-{
- FD_SET(main_pipe[0], rfds);
- return main_pipe[0];
-}
-
static void consume_pipe(void)
{
char buffer[256];
@@ -48,20 +38,20 @@ static void consume_pipe(void)
FATAL("error reading from pipe: %s\n", strerror(errno));
}
-static int ioops_consume(int fd_count, fd_set * rfds,
- G_GNUC_UNUSED fd_set * wfds,
- G_GNUC_UNUSED fd_set * efds)
+static gboolean
+main_notify_event(G_GNUC_UNUSED GIOChannel *source,
+ G_GNUC_UNUSED GIOCondition condition,
+ G_GNUC_UNUSED gpointer data)
{
- if (FD_ISSET(main_pipe[0], rfds)) {
- consume_pipe();
- FD_CLR(main_pipe[0], rfds);
- fd_count--;
- }
- return fd_count;
+ consume_pipe();
+ main_notify_triggered();
+ return true;
}
void init_main_notify(void)
{
+ GIOChannel *channel;
+
main_task = g_thread_self();
if (pipe(main_pipe) < 0)
@@ -69,15 +59,15 @@ void init_main_notify(void)
if (set_nonblocking(main_pipe[1]) < 0)
g_error("Couldn't set non-blocking I/O: %s", strerror(errno));
- main_notify_IO.fdset = ioops_fdset;
- main_notify_IO.consume = ioops_consume;
- registerIO(&main_notify_IO);
+ channel = g_io_channel_unix_new(main_pipe[0]);
+ g_io_add_watch(channel, G_IO_IN, main_notify_event, NULL);
+ g_io_channel_unref(channel);
+
main_task = g_thread_self();
}
void deinit_main_notify(void)
{
- deregisterIO(&main_notify_IO);
xclose(main_pipe[0]);
xclose(main_pipe[1]);
}