diff options
| author | Lennart Poettering <lennart@poettering.net> | 2008-05-27 12:15:57 +0000 | 
|---|---|---|
| committer | Lennart Poettering <lennart@poettering.net> | 2008-05-27 12:15:57 +0000 | 
| commit | a26c1816f67026d18d7051fdd66c04528a443ba1 (patch) | |
| tree | 0fd1c638f8b5adf3027f90d1b31bf39f5129c368 /src | |
| parent | b591a78e98e75c54bb9e952d21de0b2fee7f983d (diff) | |
fix waiting for PA connection
git-svn-id: file:///home/lennart/svn/public/libcanberra/trunk@19 01b60673-d06a-42c0-afdd-89cb8e0f78ac
Diffstat (limited to 'src')
| -rw-r--r-- | src/pulse.c | 21 | 
1 files changed, 15 insertions, 6 deletions
diff --git a/src/pulse.c b/src/pulse.c index b576058..0ceab56 100644 --- a/src/pulse.c +++ b/src/pulse.c @@ -295,13 +295,22 @@ int driver_open(ca_context *c) {          return CA_ERROR_OOM;      } -    pa_threaded_mainloop_wait(p->mainloop); +    for (;;) { +        pa_context_state_t state = pa_context_get_state(p->context); -    if (pa_context_get_state(p->context) != PA_CONTEXT_READY) { -        ret = translate_error(pa_context_errno(p->context)); -        pa_threaded_mainloop_unlock(p->mainloop); -        driver_destroy(c); -        return ret; +        if (state == PA_CONTEXT_READY) +            break; + +        if (state == PA_CONTEXT_FAILED) { +            ret = translate_error(pa_context_errno(p->context)); +            pa_threaded_mainloop_unlock(p->mainloop); +            driver_destroy(c); +            return ret; +        } + +        ca_assert(state != PA_CONTEXT_TERMINATED); + +        pa_threaded_mainloop_wait(p->mainloop);      }      pa_threaded_mainloop_unlock(p->mainloop);  | 
