tech-net archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: passive references
Date: Tue, 9 Feb 2016 20:33:51 +0900
From: Kengo NAKAHARA <k-nakahara%iij.ad.jp@localhost>
Is "target->prt_draining = false;" required at the end of psref_target_drain()?
Or, shouldn't psref_target_drain() be called twice?
My kernel paniced with the following message.
====================
kernel diagnostic assertion "!target->prt_draining" failed: file "sys/kern/subr_psref.c", line 395
====================
You shouldn't call psref_target_drain twice, unless you have already
called psref_target_destroy and psref_target_init again. You should:
1. Guarantee that no new references can be made. For example, remove
the object in question from a list.
2. Call psref_target_drain (once) to wait for existing references to
drain.
3. Call psref_target_destroy to destroy the psref target.
See the updated example I gave here for illustration:
<https://mail-index.netbsd.org/tech-kern/2016/02/09/msg020184.html>.
I am implementing ip_encap with passive reference. I use passive reference
to exclude encaptab list because ep->func (in encap[46]_lookup) can sleep.
Cool!
Home |
Main Index |
Thread Index |
Old Index