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