Page MenuHomeFreeBSD

D54157.1792375847.diff
No OneTemporary

Size
1 KB
Referenced Files
None
Subscribers
None

D54157.1792375847.diff

diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -1726,6 +1726,9 @@
error = EBUSY;
if (error != 0) {
SOCK_UNLOCK(so2);
+ mtx_lock(&sp->mtx);
+ sp->state = SPLICE_EXCEPTION;
+ mtx_unlock(&sp->mtx);
so_unsplice(so, false);
return (error);
}
@@ -1733,6 +1736,9 @@
if (so->so_snd.sb_tls_info != NULL) {
SOCK_SENDBUF_UNLOCK(so2);
SOCK_UNLOCK(so2);
+ mtx_lock(&sp->mtx);
+ sp->state = SPLICE_EXCEPTION;
+ mtx_unlock(&sp->mtx);
so_unsplice(so, false);
return (EINVAL);
}
@@ -1742,6 +1748,11 @@
mtx_lock(&sp->mtx);
SOCK_SENDBUF_UNLOCK(so2);
SOCK_UNLOCK(so2);
+ if (sp->state == SPLICE_EXCEPTION) {
+ mtx_unlock(&sp->mtx);
+ so_unsplice(so, false);
+ return (EINVAL);
+ }
if (splice->sp_idle.tv_sec != 0 || splice->sp_idle.tv_usec != 0) {
taskqueue_enqueue_timeout_sbt(taskqueue_thread, &sp->timeout,
@@ -1787,6 +1798,7 @@
/*
* A splice is in the middle of being set up.
*/
+ sp->state = SPLICE_EXCEPTION;
mtx_unlock(&sp->mtx);
SOCK_RECVBUF_UNLOCK(so);
SOCK_UNLOCK(so);

File Metadata

Mime Type
text/plain
Expires
Mon, Oct 19, 2:10 AM (7 h, 44 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30505681
Default Alt Text
D54157.1792375847.diff (1 KB)

Event Timeline