[HarfBuzz] harfbuzz: Branch 'master' - 6 commits

Behdad Esfahbod behdad at kemper.freedesktop.org
Mon Jul 16 13:45:36 UTC 2018


 appveyor.yml                      |    3 ++-
 src/hb-atomic-private.hh          |   27 ++++++++++++++++++++++++---
 src/hb-open-type-private.hh       |    2 +-
 src/hb-ot-shape-complex-arabic.cc |    2 +-
 4 files changed, 28 insertions(+), 6 deletions(-)

New commits:
commit 804b59cf4901d471253016e0cbf82cc1bbbc1d15
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Mon Jul 16 15:44:58 2018 +0200

    Relax C++11 atomic ops memory order to acquire-release

diff --git a/src/hb-atomic-private.hh b/src/hb-atomic-private.hh
index f234fe04..14960026 100644
--- a/src/hb-atomic-private.hh
+++ b/src/hb-atomic-private.hh
@@ -53,14 +53,14 @@
 #include <atomic>
 
 typedef int hb_atomic_int_impl_t;
-#define hb_atomic_int_impl_add(AI, V)		(reinterpret_cast<std::atomic<int> *> (&AI)->fetch_add (V))
+#define hb_atomic_int_impl_add(AI, V)		(reinterpret_cast<std::atomic<int> *> (&AI)->fetch_add (V, std::memory_order_acq_rel))
 
-#define hb_atomic_ptr_impl_get(P)		(reinterpret_cast<std::atomic<void*> *> (P)->load ())
+#define hb_atomic_ptr_impl_get(P)		(reinterpret_cast<std::atomic<void*> *> (P)->load (std::memory_order_acquire))
 static inline bool
 _hb_atomic_ptr_impl_cmplexch (const void **P, const void *O_, const void *N)
 {
   const void *O = O_; // Need lvalue
-  return reinterpret_cast<std::atomic<const void*> *> (P)->compare_exchange_weak ((O), (N));
+  return reinterpret_cast<std::atomic<const void*> *> (P)->compare_exchange_weak ((O), (N), std::memory_order_acq_rel);
 }
 #define hb_atomic_ptr_impl_cmpexch(P,O,N)	(_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N)))
 
commit bda242409fc0cbb79a0ff00eba9856c4b0a9c7a1
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Mon Jul 16 15:41:09 2018 +0200

    Implement C++11 <atomic> operations
    
    Fixes https://github.com/harfbuzz/harfbuzz/issues/345

diff --git a/src/hb-atomic-private.hh b/src/hb-atomic-private.hh
index 12caacaa..f234fe04 100644
--- a/src/hb-atomic-private.hh
+++ b/src/hb-atomic-private.hh
@@ -46,6 +46,25 @@
 /* Defined externally, i.e. in config.h; must have typedef'ed hb_atomic_int_impl_t as well. */
 
 
+#elif !defined(HB_NO_MT) && __cplusplus >= 201103L
+
+/* Prefer C++11 atomics. */
+
+#include <atomic>
+
+typedef int hb_atomic_int_impl_t;
+#define hb_atomic_int_impl_add(AI, V)		(reinterpret_cast<std::atomic<int> *> (&AI)->fetch_add (V))
+
+#define hb_atomic_ptr_impl_get(P)		(reinterpret_cast<std::atomic<void*> *> (P)->load ())
+static inline bool
+_hb_atomic_ptr_impl_cmplexch (const void **P, const void *O_, const void *N)
+{
+  const void *O = O_; // Need lvalue
+  return reinterpret_cast<std::atomic<const void*> *> (P)->compare_exchange_weak ((O), (N));
+}
+#define hb_atomic_ptr_impl_cmpexch(P,O,N)	(_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N)))
+
+
 #elif !defined(HB_NO_MT) && (defined(_WIN32) || defined(__CYGWIN__))
 
 #include <windows.h>
@@ -162,16 +181,18 @@ typedef int hb_atomic_int_impl_t;
 #endif
 
 
+#ifndef HB_ATOMIC_INT_INIT
 #define HB_ATOMIC_INT_INIT(V)          {V}
+#endif
 
 struct hb_atomic_int_t
 {
-  hb_atomic_int_impl_t v;
+  mutable hb_atomic_int_impl_t v;
 
   inline void set_unsafe (int v_) { v = v_; }
   inline int get_unsafe (void) const { return v; }
-  inline int inc (void) { return hb_atomic_int_impl_add (const_cast<hb_atomic_int_impl_t &> (v),  1); }
-  inline int dec (void) { return hb_atomic_int_impl_add (const_cast<hb_atomic_int_impl_t &> (v), -1); }
+  inline int inc (void) { return hb_atomic_int_impl_add (v,  1); }
+  inline int dec (void) { return hb_atomic_int_impl_add (v, -1); }
 };
 
 
diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh
index 207f6e0e..f6113c33 100644
--- a/src/hb-open-type-private.hh
+++ b/src/hb-open-type-private.hh
@@ -1247,7 +1247,7 @@ struct hb_lazy_loader_t
 
   private:
   hb_face_t *face;
-  T *instance;
+  mutable T *instance;
 };
 
 /* Logic is shared between hb_lazy_loader_t and hb_table_lazy_loader_t */
diff --git a/src/hb-ot-shape-complex-arabic.cc b/src/hb-ot-shape-complex-arabic.cc
index b1cba1c7..0c4948df 100644
--- a/src/hb-ot-shape-complex-arabic.cc
+++ b/src/hb-ot-shape-complex-arabic.cc
@@ -250,7 +250,7 @@ struct arabic_shape_plan_t
    * mask_array[NONE] == 0. */
   hb_mask_t mask_array[ARABIC_NUM_FEATURES + 1];
 
-  arabic_fallback_plan_t *fallback_plan;
+  mutable arabic_fallback_plan_t *fallback_plan;
 
   unsigned int do_fallback : 1;
   unsigned int has_stch : 1;
commit 524411224054b23bab4adad7343314df45c9c183
Merge: 2aae617a 269eb456
Author: Cosimo Lupo <cosimo at anthrotype.com>
Date:   Mon Jul 16 14:42:43 2018 +0200

    Merge pull request #1094 from anthrotype/fix-appveyor-msys2
    
    appveyor.yml: try updating msys2 to fix failing mingw-w64-x86_64 build

commit 269eb45650be66901627da7f1014339065a948a5
Author: Cosimo Lupo <cosimo at anthrotype.com>
Date:   Mon Jul 16 14:14:42 2018 +0200

    appveyor.yml: try only updating msys2 core, not the rest of the packages
    
    maybe it'll get a bit faster

diff --git a/appveyor.yml b/appveyor.yml
index 9b00d84d..6250a91e 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -30,7 +30,6 @@ environment:
 
 install:
   - 'if "%compiler%"=="msys2" C:\msys64\usr\bin\bash -lc "pacman -Syu --noconfirm"'
-  - 'if "%compiler%"=="msys2" C:\msys64\usr\bin\bash -lc "pacman -Su --noconfirm"'
   - C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-x86_64-ragel"
 
 build_script:
commit 3ab52c6cb5c405366af804d278216e2d02a39ecb
Author: Cosimo Lupo <cosimo at anthrotype.com>
Date:   Mon Jul 16 12:57:27 2018 +0200

    appveyor.yml: pass --needed option to pacman
    
    so it won't attempt reinstalling packages which are already installed

diff --git a/appveyor.yml b/appveyor.yml
index 91316e66..9b00d84d 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -45,7 +45,7 @@ build_script:
   - 'if "%compiler%"=="msvc" msbuild harfbuzz.sln /p:Configuration=%configuration% /p:Platform=%platform%'
   - 'if "%compiler%"=="msvc" if not "%platform%"=="ARM" ctest --output-on-failure -C %configuration%'
 
-  - 'if "%compiler%"=="msys2" C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-$MSYS2_ARCH-{freetype,cairo,icu,gettext,gobject-introspection,gcc,gcc-libs,glib2,graphite2,pkg-config,python2}"'
+  - 'if "%compiler%"=="msys2" C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S --needed mingw-w64-$MSYS2_ARCH-{freetype,cairo,icu,gettext,gobject-introspection,gcc,gcc-libs,glib2,graphite2,pkg-config,python2}"'
   - 'if "%compiler%"=="msys2" C:\msys64\usr\bin\bash -lc "curl https://raw.githubusercontent.com/mirror/mingw-w64/023eb04c396d4e8d8fcf604cfababc53dae13398/mingw-w64-headers/include/dwrite_1.h > %MINGW_PREFIX%/%MINGW_CHOST%/include/dwrite_1.h"'
   - 'if "%compiler%"=="msys2" C:\msys64\usr\bin\bash -lc "cd $APPVEYOR_BUILD_FOLDER; PATH=$PATH:/mingw64/bin:/mingw32/bin; ./autogen.sh --with-uniscribe --with-freetype --with-glib --with-gobject --with-cairo --with-icu --with-graphite2 --with-directwrite --build=%MINGW_CHOST% --host=%MINGW_CHOST% --prefix=%MINGW_PREFIX%; make; make check || .ci/fail.sh"'
 
commit 5631d70d36aa7952d343ea794bd5169a730706ae
Author: Cosimo Lupo <cosimo at anthrotype.com>
Date:   Mon Jul 16 12:41:59 2018 +0200

    appveyor.yml: try updating msys2 to fix failing mingw-w64-x86_64 build
    
    https://github.com/harfbuzz/harfbuzz/pull/1093#issuecomment-405201903
    https://ci.appveyor.com/project/harfbuzz/harfbuzz/build/job/ky7lao1ii1bi7ew4#L71

diff --git a/appveyor.yml b/appveyor.yml
index 05a72d96..91316e66 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -29,6 +29,8 @@ environment:
       MSYS2_ARCH: i686
 
 install:
+  - 'if "%compiler%"=="msys2" C:\msys64\usr\bin\bash -lc "pacman -Syu --noconfirm"'
+  - 'if "%compiler%"=="msys2" C:\msys64\usr\bin\bash -lc "pacman -Su --noconfirm"'
   - C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-x86_64-ragel"
 
 build_script:


More information about the HarfBuzz mailing list