Link [ NetBSD | NetBSD OpenGrok source search | PR fulltext-search | Summary of daily snapshot builds | history of daily build result | pkgsrc commit viewer ]


   
        usage: [branch:branch] [user:user] [path@revision] keyword [... [-excludekeyword [...]]] (e.g. branch:MAIN sys/arch/arm, if_wm.c@1.234 )




switch to index mode

recent branches: MAIN (9h)  netbsd-10 (6d)  netbsd-9 (6d)  netbsd-8 (11d) 

2024-05-23 02:42:00 UTC Now

2022-02-11 21:40:59 UTC MAIN commitmail json YAML

libpthread: Fix membars around rwlocks.

1. After loading self->pt_rwlocked, membar_enter() must not be
  conditional on PTHREAD__ATOMIC_IS_MEMBAR because there is no
  atomic r/m/w operation here which could imply the acquire barrier.

  (This should maybe just be a load-acquire operation, but we don't
  have atomic_load_acquire in userland at the moment -- TBD.)

2. Before storing thread->pt_rwlocked, must issue membar_exit() so
  that this is a store-release operation -- except if we had just
  done an atomic r/m/w and PTHREAD__ATOMIC_IS_MEMBAR is set, in
  which case it can be elided.

  The second membar_exit() added here might be safely hoisted out of
  the loop but I'm not sure -- needs more analysis to prove that
  would be safe.

(riastradh)