On 1/31/11 4:32 AM, Bjoern A. Zeeb wrote:
On Mon, 31 Jan 2011, Eugene Grosbein wrote:
On 31.01.2011 14:20, Julian Elischer wrote:
# gdb kernel
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License,
and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty"
for details.
This GDB was configured as "amd64-marcel-freebsd"...
(gdb) l *0xffffffff803c1315
0xffffffff803c1315 is in ng_address_hook
(/home/src/sys/netgraph/ng_base.c:3504).
3499 * Quick sanity check..
3500 * Since a hook holds a reference on it's node,
once we know
3501 * that the peer is still connected (even if
invalid,) we know
3502 * that the peer node is present, though maybe
invalid.
3503 */
3504 if ((hook == NULL) ||
3505 NG_HOOK_NOT_VALID(hook) ||
3506 NG_HOOK_NOT_VALID(peer = NG_HOOK_PEER(hook)) ||
3507 NG_NODE_NOT_VALID(peernode =
NG_PEER_NODE(hook))) {
3508 NG_FREE_ITEM(item);
replace with:
which is essentially what I had suggested in the formerly mentioned PR
already (just remove the first printf macro).
3504 if ((hook == NULL) ||
3505 NG_HOOK_NOT_VALID(hook) ||
((peer = NG_HOOK_PEER(hook)) == NULL) ||
3506 NG_HOOK_NOT_VALID(peer) ||
((peernode = NG_PEER_NODE(hook)) == NULL) ||
3507 NG_NODE_NOT_VALID(peernode)) {
if (peer)
kassert((peernode != NULL), ("peer
node NULL wile peer hook exists"));
3508 NG_FREE_ITEM(item);
The problem is that it will not help to fix the race; if you go
up in the same file you'll find another similar one of these checks
with a scary rev 1.1. (I think) comment (that you, Julian, should know
very well;-)
The solution that this needs is: proper locking.
It does not compile:
/home/src/sys/netgraph/ng_base.c: In function 'ng_address_hook':
/home/src/sys/netgraph/ng_base.c:3511: warning: implicit
declaration of function 'kassert'
/home/src/sys/netgraph/ng_base.c:3511: warning: nested extern
declaration of 'kassert'
yeah KASSERT is upper case.
slaps head... kassert is at work....
*** Error code 1
1 error
*** Error code 2
1 error
*** Error code 2
1 error
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"