summaryrefslogtreecommitdiff
path: root/src/pulse.c
diff options
context:
space:
mode:
authorWatcom <watcom.hecht@gmail.com>2016-05-07 19:19:30 -0300
committerMichael Stapelberg <stapelberg@users.noreply.github.com>2016-05-08 00:19:30 +0200
commit4807be8b5f188244b893c0d3466f32ed4b864d89 (patch)
tree017473bb58b117a7924f88b960cea88dc6ffa9d9 /src/pulse.c
parentc094f47b457104c267dd55782efc34c47f05cf9d (diff)
reconnect to PulseAudio if connection is lost (fixes #124) (#125)
Diffstat (limited to 'src/pulse.c')
-rw-r--r--src/pulse.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/pulse.c b/src/pulse.c
index f9ed5d3..3398014 100644
--- a/src/pulse.c
+++ b/src/pulse.c
@@ -20,6 +20,7 @@ static pa_threaded_mainloop *main_loop = NULL;
static pa_context *context = NULL;
static pa_mainloop_api *api = NULL;
static bool context_ready = false;
+static bool mainloop_thread_running = false;
static uint32_t default_sink_idx = DEFAULT_SINK_INDEX;
TAILQ_HEAD(tailhead, indexed_volume_s) cached_volume =
TAILQ_HEAD_INITIALIZER(cached_volume);
@@ -152,6 +153,7 @@ static void context_state_callback(pa_context *c, void *userdata) {
case PA_CONTEXT_SETTING_NAME:
case PA_CONTEXT_TERMINATED:
default:
+ context_ready = false;
break;
case PA_CONTEXT_READY: {
@@ -169,7 +171,10 @@ static void context_state_callback(pa_context *c, void *userdata) {
} break;
case PA_CONTEXT_FAILED:
- pulseaudio_error_log(c);
+ /* server disconnected us, attempt to reconnect */
+ context_ready = false;
+ pa_context_unref(context);
+ context = NULL;
break;
}
}
@@ -235,12 +240,14 @@ bool pulse_initialize(void) {
pulseaudio_error_log(context);
return false;
}
- if (pa_threaded_mainloop_start(main_loop) < 0) {
+ if (!mainloop_thread_running &&
+ pa_threaded_mainloop_start(main_loop) < 0) {
pulseaudio_error_log(context);
pa_threaded_mainloop_free(main_loop);
main_loop = NULL;
return false;
}
+ mainloop_thread_running = true;
}
return true;
}