Page MenuHomeFreeBSD

D27382.diff
No OneTemporary

D27382.diff

Index: head/sys/netgraph/ng_socket.c
===================================================================
--- head/sys/netgraph/ng_socket.c
+++ head/sys/netgraph/ng_socket.c
@@ -987,6 +987,8 @@
m_freem(m);
return (ENOBUFS);
}
+
+ /* sorwakeup_locked () releases the lock internally. */
sorwakeup_locked(so);
return (error);
@@ -1025,12 +1027,17 @@
addr->sg_data[addrlen] = '\0';
/* Try to tell the socket which hook it came in on. */
- if (sbappendaddr(&so->so_rcv, (struct sockaddr *)addr, m, NULL) == 0) {
+ SOCKBUF_LOCK(&so->so_rcv);
+ if (sbappendaddr_locked(&so->so_rcv, (struct sockaddr *)addr, m,
+ NULL) == 0) {
+ SOCKBUF_UNLOCK(&so->so_rcv);
m_freem(m);
TRAP_ERROR;
return (ENOBUFS);
}
- sorwakeup(so);
+
+ /* sorwakeup_locked () releases the lock internally. */
+ sorwakeup_locked(so);
return (0);
}

File Metadata

Mime Type
text/plain
Expires
Tue, Mar 31, 11:58 PM (7 h, 27 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30655946
Default Alt Text
D27382.diff (850 B)

Event Timeline