diff options
| -rw-r--r-- | src/pgm_receiver.cpp | 14 | 
1 files changed, 12 insertions, 2 deletions
diff --git a/src/pgm_receiver.cpp b/src/pgm_receiver.cpp index e87286d..ddf46b9 100644 --- a/src/pgm_receiver.cpp +++ b/src/pgm_receiver.cpp @@ -1,6 +1,7 @@  /*      Copyright (c) 2009-2012 250bpm s.r.o.      Copyright (c) 2007-2009 iMatix Corporation +    Copyright (c) 2012 Lucina & Associates      Copyright (c) 2010-2011 Miru Limited      Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file @@ -117,8 +118,15 @@ void xs::pgm_receiver_t::activate_in ()      //  processed the whole buffer but failed to write      //  the last message into the pipe.      if (pending_bytes == 0) { -        if (mru_decoder != NULL) +        if (mru_decoder != NULL) {              mru_decoder->process_buffer (NULL, 0); +            session->flush (); +        } + +        //  Resume polling. +        set_pollin (pipe_handle); +        set_pollin (socket_handle); +          return;      } @@ -128,6 +136,7 @@ void xs::pgm_receiver_t::activate_in ()      //  Ask the decoder to process remaining data.      size_t n = mru_decoder->process_buffer (pending_ptr, pending_bytes);      pending_bytes -= n; +    session->flush ();      if (pending_bytes > 0)          return; @@ -145,7 +154,8 @@ void xs::pgm_receiver_t::in_event ()      unsigned char *data = NULL;      const pgm_tsi_t *tsi = NULL; -    xs_assert (pending_bytes == 0); +    if (pending_bytes > 0) +        return;      if (has_rx_timer) {          cancel_timer (rx_timer_id);  | 
