Re: [pulseaudio-discuss] [Patch] Infinite loop in mainloop
Hi Marcel, On Sat, 2011-01-01 at 16:50 +0100, Marcel wrote: I am porting pulseaudio to OS/2. During this I run into trouble with the mainloop occasionally eating up all CPU resources. It turned out to be an inconsistency in the internal state of the mainloop. m-wakeup_requested was 0 while the wakup pipe was ready. In fact most probably there is still a race condition somewhere in the code. However, the following patch will help to recover from this inconsistencies more gracefully, especially if the mainloop is running at high priority. This came up in the meeting last Thursday [1]. Could you provide more context on this? It does appear that this is some sort of OS/2 bug rather than a bug in PA. If no other information is available, then I think this is okay to go in with an OS/2-specific conditional. Cheers, Arun [1] http://colin.guthr.ie/meetings/pulseaudio-meeting/2011/pulseaudio-meeting.2011-02-24-21.02.log.html#l-379 ___ pulseaudio-discuss mailing list pulseaudio-discuss@mail.0pointer.de https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss
[pulseaudio-discuss] [Patch] Infinite loop in mainloop
I am porting pulseaudio to OS/2. During this I run into trouble with the mainloop occasionally eating up all CPU resources. It turned out to be an inconsistency in the internal state of the mainloop. m-wakeup_requested was 0 while the wakup pipe was ready. In fact most probably there is still a race condition somewhere in the code. However, the following patch will help to recover from this inconsistencies more gracefully, especially if the mainloop is running at high priority. In mainloop.c, function dispatch_pollfds before the final return statement I inserted the following lines: r++; k--; } +/* better recovery from errors */ +if (k (m-wakeup_requested != 0) !m-quit) { +pa_log_error(Error poll returned %i more pollfds than ready IO/wakeup events. = Check wakeup pipe, rebuilding pollfds., +k - (m-wakeup_requested != 0)); +m-wakeup_requested = 1; +m-rebuild_pollfds = TRUE; +} return r; } (Sorry git is not available for OS/2 so I can't simply create a diff.) Marcel ___ pulseaudio-discuss mailing list pulseaudio-discuss@mail.0pointer.de https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss