diff options
| author | Watcom | 2016-05-07 19:19:30 -0300 | 
|---|---|---|
| committer | Michael Stapelberg | 2016-05-08 00:19:30 +0200 | 
| commit | 4807be8b5f188244b893c0d3466f32ed4b864d89 (patch) | |
| tree | 017473bb58b117a7924f88b960cea88dc6ffa9d9 | |
| parent | Merge pull request #117 from egroat/master (diff) | |
reconnect to PulseAudio if connection is lost (fixes #124) (#125)
| -rw-r--r-- | src/pulse.c | 11 | 
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;  } | 
