[HarfBuzz] harfbuzz: Branch 'master'
Behdad Esfahbod
behdad at kemper.freedesktop.org
Wed Oct 11 10:45:51 UTC 2017
src/hb-shaper-private.hh | 12 ++++++++++++
1 file changed, 12 insertions(+)
New commits:
commit 8d450dd188dea2d63a03f74d903a76741de8a217
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Wed Oct 11 12:43:46 2017 +0200
Infrastructure for creating CTFont with correct font size
https://github.com/behdad/harfbuzz/issues/360
diff --git a/src/hb-shaper-private.hh b/src/hb-shaper-private.hh
index 381398a6..2481ef8a 100644
--- a/src/hb-shaper-private.hh
+++ b/src/hb-shaper-private.hh
@@ -88,11 +88,23 @@ struct hb_shaper_data_t {
HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (data);
#define HB_SHAPER_DATA_ENSURE_DEFINE(shaper, object) \
+ HB_SHAPER_DATA_ENSURE_DEFINE_WITH_CONDITION(shaper, object, true)
+
+#define HB_SHAPER_DATA_ENSURE_DEFINE_WITH_CONDITION(shaper, object, condition) \
bool \
HB_SHAPER_DATA_ENSURE_FUNC(shaper, object) (hb_##object##_t *object) \
{\
retry: \
HB_SHAPER_DATA_TYPE (shaper, object) *data = (HB_SHAPER_DATA_TYPE (shaper, object) *) hb_atomic_ptr_get (&HB_SHAPER_DATA (shaper, object)); \
+ if (likely (data) && !(condition)) { \
+ /* Drop and recreate. */ \
+ /* If someone dropped it in the mean time, throw it away and don't touch it. \
+ * Otherwise, destruct it. */ \
+ if (hb_atomic_ptr_cmpexch (&HB_SHAPER_DATA (shaper, object), data, NULL)) { \
+ HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (data); \
+ } \
+ goto retry; \
+ } \
if (unlikely (!data)) { \
data = HB_SHAPER_DATA_CREATE_FUNC (shaper, object) (object); \
if (unlikely (!data)) \
More information about the HarfBuzz
mailing list