diff options
| author | Mikolaj Golub <trociny@FreeBSD.org> | 2011-05-29 18:00:50 +0000 |
|---|---|---|
| committer | Mikolaj Golub <trociny@FreeBSD.org> | 2011-05-29 18:00:50 +0000 |
| commit | 3204c8e596216d62b212b8af312f09cc0a7a10d8 (patch) | |
| tree | 8709a800f790b40b793280b085b866839e46be37 | |
| parent | 562c9f003ef00a6959b6150879ea3b038150d8cb (diff) | |
Notes
| -rw-r--r-- | sys/kern/uipc_socket.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index 54a050f2a39a..3334fc2c8ad0 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -1845,10 +1845,16 @@ dontblock: } SBLASTRECORDCHK(&so->so_rcv); SBLASTMBUFCHK(&so->so_rcv); - error = sbwait(&so->so_rcv); - if (error) { - SOCKBUF_UNLOCK(&so->so_rcv); - goto release; + /* + * We could receive some data while was notifying + * the protocol. Skip blocking in this case. + */ + if (so->so_rcv.sb_mb == NULL) { + error = sbwait(&so->so_rcv); + if (error) { + SOCKBUF_UNLOCK(&so->so_rcv); + goto release; + } } m = so->so_rcv.sb_mb; if (m != NULL) |
