On 20.02.2018 22:34, Raman Shishniou wrote:
On 02/20/2018 11:04 PM, Georg Chini wrote:
On 20.02.2018 19:49, Raman Shishniou wrote:
On 02/20/2018 07:02 PM, Georg Chini wrote:
On 20.02.2018 16:38, Raman Shyshniou wrote:
Currently the pipe-source will remain running even if no
writer is connected and therefore no data is produced.
This patch adds the autosuspend=<bool> option to prevent this.
Source will stay suspended if no writer is connected.
This option is enabled by default.
---
    src/modules/module-pipe-source.c | 279 
+++++++++++++++++++++++++++++----------
    1 file changed, 212 insertions(+), 67 deletions(-)

I think I need post a simple pseudo code of new thread loop because it
was completely rewritten. There are too many changes in one patch.
It can be difficult to see the whole picture of new main loop.
Well, I applied the patch and looked at the result. I still don't like the 
approach.

I would propose this:

auto_suspended = false;
revents = 0
events = POLLIN

for (;;) {

       /* This is the part that is run when the source is opened
        * or auto suspended
       if (SOURCE_IS_OPENED(source) || auto_suspended) {

           /* Check if we wake up from user suspend */
           if (corkfd >= 0 && !auto_suspended) {
                len = 0
                close pipe for writing
           }

           /* We received POLLIN or POLLHUP or both */
           if (revents) {

              /* Read data from pipe */
              len = read data

              /* Got data, post it */
              if (len > 0) {
                  if (auto_suspend) {
                      send unsuspend message
                      auto_suspend = false
                 }
                 post data
We cannot post data here because source still suspended. Sending resume message 
is not enough
to immediately resume the source. We need to wait several poll runs until it 
will be resumed.
(source->thread_info.state changed in this thread, i.e. during poll run). But 
we will see
POLLIN and/or POLLHUP each run if we don't remove pipe fd from polling.

Why do we have to wait? The source will be unsuspended on the next rtpollrun.
I do not see why we cannot already push data. Or does something get lost?


_______________________________________________
pulseaudio-discuss mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

Reply via email to