summaryrefslogtreecommitdiffstats
path: root/sys/netinet6/icmp6.c
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2006-07-23 12:24:22 +0000
committerrwatson <rwatson@FreeBSD.org>2006-07-23 12:24:22 +0000
commitfe855a5667abc09ede59fae965de56b1c90ed0af (patch)
treee735fdfb823999f7cd8fe4918a9080d79d63b3dc /sys/netinet6/icmp6.c
parentc6cb3a55828b25caf156e4335b7848b73a3d119b (diff)
downloadFreeBSD-src-fe855a5667abc09ede59fae965de56b1c90ed0af.zip
FreeBSD-src-fe855a5667abc09ede59fae965de56b1c90ed0af.tar.gz
Align IPv6 socket locking with IPv4 locking: lock socket buffer explicitly
and use _locked variants to avoid extra lock and unlock operations. Reviewed by: gnn MFC after: 1 week
Diffstat (limited to 'sys/netinet6/icmp6.c')
-rw-r--r--sys/netinet6/icmp6.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/sys/netinet6/icmp6.c b/sys/netinet6/icmp6.c
index 43c2237..1af4823 100644
--- a/sys/netinet6/icmp6.c
+++ b/sys/netinet6/icmp6.c
@@ -1954,7 +1954,9 @@ icmp6_rip6_input(mp, off)
ip6_savecontrol(last, n, &opts);
/* strip intermediate headers */
m_adj(n, off);
- if (sbappendaddr(&last->in6p_socket->so_rcv,
+ SOCKBUF_LOCK(&last->in6p_socket->so_rcv);
+ if (sbappendaddr_locked(
+ &last->in6p_socket->so_rcv,
(struct sockaddr *)&fromsa, n, opts)
== 0) {
/* should notify about lost packet */
@@ -1962,8 +1964,10 @@ icmp6_rip6_input(mp, off)
if (opts) {
m_freem(opts);
}
+ SOCKBUF_UNLOCK(
+ &last->in6p_socket->so_rcv);
} else
- sorwakeup(last->in6p_socket);
+ sorwakeup_locked(last->in6p_socket);
opts = NULL;
}
INP_UNLOCK(last);
@@ -1995,13 +1999,15 @@ icmp6_rip6_input(mp, off)
}
}
}
- if (sbappendaddr(&last->in6p_socket->so_rcv,
+ SOCKBUF_LOCK(&last->in6p_socket->so_rcv);
+ if (sbappendaddr_locked(&last->in6p_socket->so_rcv,
(struct sockaddr *)&fromsa, m, opts) == 0) {
m_freem(m);
if (opts)
m_freem(opts);
+ SOCKBUF_UNLOCK(&last->in6p_socket->so_rcv);
} else
- sorwakeup(last->in6p_socket);
+ sorwakeup_locked(last->in6p_socket);
INP_UNLOCK(last);
} else {
m_freem(m);
OpenPOWER on IntegriCloud