diff options
author | Lennart Poettering <lennart@poettering.net> | 2004-11-18 20:50:44 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2004-11-18 20:50:44 +0000 |
commit | 8641af3c6d11e3e6710cb946e9a93d0e9f639519 (patch) | |
tree | ce72b56c7460fed94808ee8023fad89df27c7e12 /polyp/pstream.c | |
parent | eef235d8795df740eb63cb135bd187b7ab9ac4ea (diff) |
* some iochannel fixes
* introduce reference counting in ioline
* fix memory leak in socket-client.c
* fix double-free error in protocol-esound.c
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@293 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'polyp/pstream.c')
-rw-r--r-- | polyp/pstream.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/polyp/pstream.c b/polyp/pstream.c index 11ca3963..c081c242 100644 --- a/polyp/pstream.c +++ b/polyp/pstream.c @@ -103,25 +103,22 @@ static void do_read(struct pa_pstream *p); static void do_something(struct pa_pstream *p) { assert(p); - if (p->dead) - return; - p->mainloop->defer_enable(p->defer_event, 0); pa_pstream_ref(p); - if (!p->dead && pa_iochannel_is_hungup(p->io)) { - p->dead = 1; - if (p->die_callback) - p->die_callback(p, p->die_callback_userdata); - } + if (!p->dead && pa_iochannel_is_readable(p->io)) + do_read(p); if (!p->dead && pa_iochannel_is_writable(p->io)) do_write(p); - if (!p->dead && pa_iochannel_is_readable(p->io)) - do_read(p); - + /* In case the line was hungup, make sure to rerun this function + as soon as possible, until all data has been read. */ + + if (!p->dead && pa_iochannel_is_hungup(p->io)) + p->mainloop->defer_enable(p->defer_event, 1); + pa_pstream_unref(p); } |