diff options
author | Max Kellermann <max@duempel.org> | 2009-01-01 18:47:25 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-01-01 18:47:25 +0100 |
commit | e93136ef0fac69b4bb7f02ba7e3b348827d597ea (patch) | |
tree | f7bffac522072ac0a32efd3cb4c1d499cbb725f0 | |
parent | ecb20c5f7e728693bcb67981fdde44832f1ed028 (diff) | |
download | mpd-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.c | 8 | ||||
-rw-r--r-- | src/event_pipe.h | 7 |
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); |