aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-01-01 18:47:25 +0100
committerMax Kellermann <max@duempel.org>2009-01-01 18:47:25 +0100
commite93136ef0fac69b4bb7f02ba7e3b348827d597ea (patch)
treef7bffac522072ac0a32efd3cb4c1d499cbb725f0
parentecb20c5f7e728693bcb67981fdde44832f1ed028 (diff)
downloadmpd-e93136ef0fac69b4bb7f02ba7e3b348827d597ea.tar.gz
mpd-e93136ef0fac69b4bb7f02ba7e3b348827d597ea.tar.xz
mpd-e93136ef0fac69b4bb7f02ba7e3b348827d597ea.zip
event_pipe: added event_pipe_emit_fast()
event_pipe_emit_fast() is aimed for use in signal handlers: it doesn't lock the mutex, and doesn't log on error. That makes it potentially lossy, but for its intended use, that does not matter.
Diffstat (limited to '')
-rw-r--r--src/event_pipe.c8
-rw-r--r--src/event_pipe.h7
2 files changed, 15 insertions, 0 deletions
diff --git a/src/event_pipe.c b/src/event_pipe.c
index 448903410..318e59df6 100644
--- a/src/event_pipe.c
+++ b/src/event_pipe.c
@@ -137,6 +137,14 @@ void event_pipe_emit(enum pipe_event event)
g_error("error writing to pipe: %s", strerror(errno));
}
+void event_pipe_emit_fast(enum pipe_event event)
+{
+ assert((unsigned)event < PIPE_EVENT_MAX);
+
+ pipe_events[event] = true;
+ write(event_pipe[1], "", 1);
+}
+
void event_pipe_signal(void)
{
event_pipe_emit(PIPE_EVENT_SIGNAL);
diff --git a/src/event_pipe.h b/src/event_pipe.h
index 3126df9cd..8da10c759 100644
--- a/src/event_pipe.h
+++ b/src/event_pipe.h
@@ -56,6 +56,13 @@ event_pipe_register(enum pipe_event event, event_pipe_callback_t callback);
void event_pipe_emit(enum pipe_event event);
+/**
+ * Similar to event_pipe_emit(), but aimed for use in signal handlers:
+ * it doesn't lock the mutex, and doesn't log on error. That makes it
+ * potentially lossy, but for its intended use, that does not matter.
+ */
+void event_pipe_emit_fast(enum pipe_event event);
+
void event_pipe_signal(void);
void event_pipe_wait(void);