diff --git a/src/stream_sock.c b/src/stream_sock.c index 8cd721ea7..1a824bd71 100644 --- a/src/stream_sock.c +++ b/src/stream_sock.c @@ -489,14 +489,15 @@ int stream_sock_read(int fd) { /* we have to wake up if there is a special event or if we don't have * any more data to forward. */ - if ((b->flags & (BF_READ_NULL|BF_READ_ERROR|BF_SHUTR|BF_READ_DONTWAIT)) || - !b->to_forward || + if ((b->flags & (BF_READ_NULL|BF_READ_ERROR)) || si->state != SI_ST_EST || - b->cons->state != SI_ST_EST || - (si->flags & SI_FL_ERR)) + (si->flags & SI_FL_ERR) || + ((b->flags & BF_READ_PARTIAL) && (!b->to_forward || b->cons->state != SI_ST_EST))) task_wakeup(si->owner, TASK_WOKEN_IO); - - b->flags &= ~BF_READ_DONTWAIT; + + if (b->flags & BF_READ_ACTIVITY) + b->flags &= ~BF_READ_DONTWAIT; + fdtab[fd].ev &= ~FD_POLL_IN; return retval;