[HarfBuzz] harfbuzz: Branch 'master'

Behdad Esfahbod behdad at kemper.freedesktop.org
Wed Nov 14 01:50:50 UTC 2018


 src/hb-machinery.hh |   14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

New commits:
commit dc4225ccd1d16a1139cbc6092353db9ed03e8980
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Nov 13 20:48:46 2018 -0500

    Don't retry creating again and again in lazy_loader if create failed
    
    Still does that if get_null() returns nullptr.  Our shaper data objects
    are like that.  Shrug.

diff --git a/src/hb-machinery.hh b/src/hb-machinery.hh
index ce6c9453..ffc9627f 100644
--- a/src/hb-machinery.hh
+++ b/src/hb-machinery.hh
@@ -752,16 +752,19 @@ struct hb_data_wrapper_t
     return *(((Data **) (void *) this) - WheresData);
   }
 
+  inline bool is_inert (void) const { return !get_data (); }
+
   template <typename Stored, typename Subclass>
   inline Stored * call_create (void) const
   {
-    Data *data = this->get_data ();
-    return likely (data) ? Subclass::create (data) : nullptr;
+    return Subclass::create (this->get_data ());
   }
 };
 template <>
 struct hb_data_wrapper_t<void, 0>
 {
+  inline bool is_inert (void) const { return false; }
+
   template <typename Stored, typename Funcs>
   inline Stored * call_create (void) const
   {
@@ -800,7 +803,7 @@ struct hb_lazy_loader_t : hb_data_wrapper_t<Data, WheresData>
 
   static inline void do_destroy (Stored *p)
   {
-    if (p)
+    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
       Funcs::destroy (p);
   }
 
@@ -814,9 +817,12 @@ struct hb_lazy_loader_t : hb_data_wrapper_t<Data, WheresData>
     Stored *p = this->instance.get ();
     if (unlikely (!p))
     {
+      if (unlikely (this->is_inert ()))
+	return const_cast<Stored *> (Funcs::get_null ());
+
       p = this->template call_create<Stored, Funcs> ();
       if (unlikely (!p))
-	return const_cast<Stored *> (Funcs::get_null ());
+	p = const_cast<Stored *> (Funcs::get_null ());
 
       if (unlikely (!this->instance.cmpexch (nullptr, p)))
       {


More information about the HarfBuzz mailing list