]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/tipc/socket.c
[TIPC]: Allow stream receive to read from multiple TIPC messages
[mv-sheeva.git] / net / tipc / socket.c
index ca6f52f392a9d32b24eed723521b45949db521bb..c1a199c0fa6d838119bf1cca89df479e75d692eb 100644 (file)
@@ -919,7 +919,8 @@ restart:
        /* Consume received message (optional) */
 
        if (likely(!(flags & MSG_PEEK))) {
-               if (unlikely(++tsock->p->conn_unacked >= TIPC_FLOW_CONTROL_WIN))
+               if ((sock->state != SS_READY) &&
+                   (++tsock->p->conn_unacked >= TIPC_FLOW_CONTROL_WIN))
                        tipc_acknowledge(tsock->p->ref, tsock->p->conn_unacked);
                advance_queue(tsock);
        }
@@ -1064,7 +1065,9 @@ restart:
        /* Loop around if more data is required */
 
        if ((sz_copied < buf_len)    /* didn't get all requested data */
-           && (flags & MSG_WAITALL) /* ... and need to wait for more */
+           && (!skb_queue_empty(&sock->sk->sk_receive_queue) ||
+               (flags & MSG_WAITALL))
+                                    /* ... and more is ready or required */
            && (!(flags & MSG_PEEK)) /* ... and aren't just peeking at data */
            && (!err)                /* ... and haven't reached a FIN */
            )