• D
    Rewrite virAtomic APIs using GLib's atomic ops code · 0c9fd4cf
    Daniel P. Berrange 提交于
    There are a few issues with the current virAtomic APIs
    
     - They require use of a virAtomicInt struct instead of a plain
       int type
     - Several of the methods do not implement memory barriers
     - The methods do not implement compiler re-ordering barriers
     - There is no Win32 native impl
    
    The GLib library has a nice LGPLv2+ licensed impl of atomic
    ops that works with GCC, Win32, or pthreads.h that addresses
    all these problems. The main downside to their code is that
    the pthreads impl uses a single global mutex, instead of
    a per-variable mutex. Given that it does have a Win32 impl
    though, we don't expect anyone to seriously use the pthread.h
    impl, so this downside is not significant.
    
    * .gitignore: Ignore test case
    * configure.ac: Check for which atomic ops impl to use
    * src/Makefile.am: Add viratomic.c
    * src/nwfilter/nwfilter_dhcpsnoop.c: Switch to new atomic
      ops APIs and plain int datatype
    * src/util/viratomic.h: inline impls of all atomic ops
      for GCC, Win32 and pthreads
    * src/util/viratomic.c: Global pthreads mutex for atomic
      ops
    * tests/viratomictest.c: Test validate to validate safety
      of atomic ops.
    Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
    0c9fd4cf
Makefile.am 55.6 KB