tech-net archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: struct ifnet and ifaddr handling [was: Re: Making global variables of if.c MPSAFE]
Date: Wed, 19 Nov 2014 12:51:06 +0900
From: Ryota Ozaki <ozaki-r%netbsd.org@localhost>
On Wed, Nov 19, 2014 at 3:11 AM, Taylor R Campbell
<campbell+netbsd-tech-kern%mumble.net@localhost> wrote:
> do {
> refcnt = m->m_refcnt;
> if (refcnt == 1) {
> mutex_enter(&m->m_lock);
> refcnt = atomic_dec_uint_nv(&m->m_refcnt);
> if (refcnt == 0)
> cv_broadcast(&m->m_cv);
> mutex_exit(&m->m_lock);
> }
> } while (atomic_cas_uint(&m->m_refcnt, refcnt, refcnt - 1) != refcnt);
BTW, do we need break after mutex_exit? Otherwise, m->m_refcnt is likely
to be decremented twice when refcnt == 1.
Yes -- typo in my hastily-written uncompiled untested code.
Home |
Main Index |
Thread Index |
Old Index