[pulseaudio-discuss] [PATCH RFCv3 17/51] iochannel: Fix channel enable
Peter Meerwald
pmeerw at pmeerw.net
Tue Nov 4 15:26:12 PST 2014
enable_events() is deleting the input_event for every read;
this is causing the mainloop to rebuild its pollfds
Signed-off-by: Peter Meerwald <pmeerw at pmeerw.net>
---
src/pulsecore/iochannel.c | 35 +++++++++++------------------------
1 file changed, 11 insertions(+), 24 deletions(-)
diff --git a/src/pulsecore/iochannel.c b/src/pulsecore/iochannel.c
index ae9b42c..f046096 100644
--- a/src/pulsecore/iochannel.c
+++ b/src/pulsecore/iochannel.c
@@ -82,35 +82,24 @@ static void enable_events(pa_iochannel *io) {
}
if (io->ifd == io->ofd && io->ifd >= 0) {
- pa_io_event_flags_t f = PA_IO_EVENT_NULL;
+ pa_io_event_flags_t f = PA_IO_EVENT_INPUT;
- if (!io->readable)
- f |= PA_IO_EVENT_INPUT;
if (!io->writable)
f |= PA_IO_EVENT_OUTPUT;
pa_assert(io->input_event == io->output_event);
- if (f != PA_IO_EVENT_NULL) {
- if (io->input_event)
- io->mainloop->io_enable(io->input_event, f);
- else
- io->input_event = io->output_event = io->mainloop->io_new(io->mainloop, io->ifd, f, callback, io);
- } else
- delete_events(io);
-
+ if (io->input_event)
+ io->mainloop->io_enable(io->input_event, f);
+ else
+ io->input_event = io->output_event = io->mainloop->io_new(io->mainloop, io->ifd, f, callback, io);
} else {
if (io->ifd >= 0) {
- if (!io->readable) {
- if (io->input_event)
- io->mainloop->io_enable(io->input_event, PA_IO_EVENT_INPUT);
- else
- io->input_event = io->mainloop->io_new(io->mainloop, io->ifd, PA_IO_EVENT_INPUT, callback, io);
- } else if (io->input_event) {
- io->mainloop->io_free(io->input_event);
- io->input_event = NULL;
- }
+ if (io->input_event)
+ io->mainloop->io_enable(io->input_event, PA_IO_EVENT_INPUT);
+ else
+ io->input_event = io->mainloop->io_new(io->mainloop, io->ifd, PA_IO_EVENT_INPUT, callback, io);
}
if (io->ofd >= 0) {
@@ -119,10 +108,8 @@ static void enable_events(pa_iochannel *io) {
io->mainloop->io_enable(io->output_event, PA_IO_EVENT_OUTPUT);
else
io->output_event = io->mainloop->io_new(io->mainloop, io->ofd, PA_IO_EVENT_OUTPUT, callback, io);
- } else if (io->output_event) {
- io->mainloop->io_free(io->output_event);
- io->output_event = NULL;
- }
+ } else if (io->output_event)
+ io->mainloop->io_enable(io->output_event, 0);
}
}
}
--
1.9.1
More information about the pulseaudio-discuss
mailing list