svn commit: r205465 - stable/6/sys/net
Jung-uk Kim
jkim at FreeBSD.org
Mon Mar 22 20:21:23 UTC 2010
Author: jkim
Date: Mon Mar 22 20:21:22 2010
New Revision: 205465
URL: http://svn.freebsd.org/changeset/base/205465
Log:
MFC: r205092
Tidy up callout for select(2) and read timeout.
- Add a missing callout_drain(9) before the descriptor deallocation.[1]
- Prefer callout_init_mtx(9) over callout_init(9) and let the callout
subsystem handle the mutex for callout function.
PR: kern/144453
Submitted by: Alexander Sack (asack at niksun dot com)[1]
Modified:
stable/6/sys/net/bpf.c
Directory Properties:
stable/6/sys/ (props changed)
stable/6/sys/contrib/pf/ (props changed)
stable/6/sys/dev/cxgb/ (props changed)
Modified: stable/6/sys/net/bpf.c
==============================================================================
--- stable/6/sys/net/bpf.c Mon Mar 22 20:12:10 2010 (r205464)
+++ stable/6/sys/net/bpf.c Mon Mar 22 20:21:22 2010 (r205465)
@@ -398,7 +398,7 @@ bpfopen(struct cdev *dev, int flags, int
mac_create_bpfdesc(td->td_ucred, d);
#endif
mtx_init(&d->bd_mtx, devtoname(dev), "bpf cdev lock", MTX_DEF);
- callout_init(&d->bd_callout, NET_CALLOUT_MPSAFE);
+ callout_init_mtx(&d->bd_callout, &d->bd_mtx, 0);
knlist_init(&d->bd_sel.si_note, &d->bd_mtx, NULL, NULL, NULL);
return (0);
@@ -429,6 +429,7 @@ bpfclose(struct cdev *dev, int flags, in
mac_destroy_bpfdesc(d);
#endif /* MAC */
knlist_destroy(&d->bd_sel.si_note);
+ callout_drain(&d->bd_callout);
bpf_freed(d);
dev->si_drv1 = NULL;
free(d, M_BPF);
@@ -577,13 +578,15 @@ bpf_timed_out(void *arg)
{
struct bpf_d *d = (struct bpf_d *)arg;
- BPFD_LOCK(d);
+ BPFD_LOCK_ASSERT(d);
+
+ if (callout_pending(&d->bd_callout) || !callout_active(&d->bd_callout))
+ return;
if (d->bd_state == BPF_WAITING) {
d->bd_state = BPF_TIMED_OUT;
if (d->bd_slen != 0)
bpf_wakeup(d);
}
- BPFD_UNLOCK(d);
}
static int
More information about the svn-src-all
mailing list