<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>67906</bug_id>
          
          <creation_ts>2011-09-11 14:13:34 -0700</creation_ts>
          <short_desc>Use of static RefPtr in FontPlatformData causes global destructor ordering problems</short_desc>
          <delta_ts>2011-09-20 15:38:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Marshall Greenblatt">marshall</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>465408</commentid>
    <comment_count>0</comment_count>
    <who name="Marshall Greenblatt">marshall</who>
    <bug_when>2011-09-11 14:13:34 -0700</bug_when>
    <thetext>From WebKit/Source/WebCore/platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:

FontPlatformData::RefCountedHFONT* FontPlatformData::hashTableDeletedFontValue()
{
    static RefPtr&lt;RefCountedHFONT&gt; deletedValue =
        RefCountedHFONT::create(reinterpret_cast&lt;HFONT&gt;(-1));
    return deletedValue.get();
}

The problem with using static RefPtr is that, on Windows, the destructor of |deletedValue| will not be called until doexit() is executed on the main application thread. In single-process applications (like Chromium Embedded Framework) the main application thread may not be the same as the WebKit thread. This problem was exposed by WebKit revision 92254 which adds asserts to RefCounted to make sure ref/deref happens on the right thread.

According to the WebKit experts the correct solution is to intentionally leak the static RefCountedHFONT object using leakRef().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465410</commentid>
    <comment_count>1</comment_count>
      <attachid>107007</attachid>
    <who name="Marshall Greenblatt">marshall</who>
    <bug_when>2011-09-11 14:18:54 -0700</bug_when>
    <thetext>Created attachment 107007
Proposed fix for bug 67906.

Please review the attached bug_67906.patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465411</commentid>
    <comment_count>2</comment_count>
      <attachid>107008</attachid>
    <who name="Marshall Greenblatt">marshall</who>
    <bug_when>2011-09-11 14:24:31 -0700</bug_when>
    <thetext>Created attachment 107008
Proposed fix for bug 67906.

Please review the attached patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465466</commentid>
    <comment_count>3</comment_count>
      <attachid>107008</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-11 20:38:48 -0700</bug_when>
    <thetext>Comment on attachment 107008
Proposed fix for bug 67906.

This looks fine, but we should use DECLARE_STATIC_LOCAL though (and I would merge those too lines together).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465578</commentid>
    <comment_count>4</comment_count>
      <attachid>107045</attachid>
    <who name="Marshall Greenblatt">marshall</who>
    <bug_when>2011-09-12 06:23:37 -0700</bug_when>
    <thetext>Created attachment 107045
Proposed Fix #3

Changed to use DEFINE_STATIC_LOCAL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465583</commentid>
    <comment_count>5</comment_count>
    <who name="Marshall Greenblatt">marshall</who>
    <bug_when>2011-09-12 06:28:58 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=107045) [details]
&gt; Proposed Fix #3
&gt; 
&gt; Changed to use DEFINE_STATIC_LOCAL.

Note: The above patch doesn&apos;t use leakRef() in combination with DEFINE_STATIC_LOCAL. This is because DEFINE_STATIC_LOCAL is already leaking a RefPtr that is holding a reference to the object, so I don&apos;t believe it&apos;s necessary to additionally call leakRef().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470306</commentid>
    <comment_count>6</comment_count>
    <who name="Marshall Greenblatt">marshall</who>
    <bug_when>2011-09-20 13:50:25 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 107008 [details])
&gt; This looks fine, but we should use DECLARE_STATIC_LOCAL though (and I would merge those too lines together).

Hi Adam, can you review the updated patch? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470314</commentid>
    <comment_count>7</comment_count>
      <attachid>107045</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-20 14:02:32 -0700</bug_when>
    <thetext>Comment on attachment 107045
Proposed Fix #3

Looks great.  Sorry for dropping the ball.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470409</commentid>
    <comment_count>8</comment_count>
      <attachid>107045</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-20 15:38:43 -0700</bug_when>
    <thetext>Comment on attachment 107045
Proposed Fix #3

Clearing flags on attachment: 107045

Committed r95576: &lt;http://trac.webkit.org/changeset/95576&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470411</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-20 15:38:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107007</attachid>
            <date>2011-09-11 14:18:54 -0700</date>
            <delta_ts>2011-09-11 14:24:31 -0700</delta_ts>
            <desc>Proposed fix for bug 67906.</desc>
            <filename>bug_67906.patch</filename>
            <type>text/plain</type>
            <size>1656</size>
            <attacher name="Marshall Greenblatt">marshall</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDk0ODU2KQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDEzIEBADQorMjAxMS0wOS0xMSAgTWFyc2hhbGwgR3JlZW5ibGF0dCAgPG1h
cnNoYWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBVc2UgbGVha1JlZigpIHRvIGludGVudGlv
bmFsbHkgbGVhayB0aGUgc3RhdGljIFJlZkNvdW50ZWRIRk9OVCBvYmplY3QgcmV0dXJuZWQgZnJv
bQorICAgICAgICBGb250UGxhdGZvcm1EYXRhOjpoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkg
dG8gYXZvaWQgZ2xvYmFsIGRlc3RydWN0b3Igb3JkZXJpbmcgcHJvYmxlbXMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzkwNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNocm9taXVtV2luLmNwcDoKKwogMjAxMS0wOS0wOSAg
UGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIg
SW5zcGVjdG9yOiBpbnRyb2R1Y2UgSmF2YVNjcmlwdFNvdXJjZUZyYW1lIGNsYXNzLgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21p
dW1XaW4uY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA5NDg1NikNCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFDaHJv
bWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkNCkBAIC0zOCw2ICszOCw3IEBADQogCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiU2tpYUZvbnRXaW4uaCIKKyNpbmNsdWRl
ICJTdGRMaWJFeHRyYXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMTYsOSArMTE3
LDkgQEANCiAKIEZvbnRQbGF0Zm9ybURhdGE6OlJlZkNvdW50ZWRIRk9OVCogRm9udFBsYXRmb3Jt
RGF0YTo6aGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpCiB7Ci0gICAgc3RhdGljIFJlZlB0cjxS
ZWZDb3VudGVkSEZPTlQ+IGRlbGV0ZWRWYWx1ZSA9Ci0gICAgICAgIFJlZkNvdW50ZWRIRk9OVDo6
Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8SEZPTlQ+KC0xKSk7Ci0gICAgcmV0dXJuIGRlbGV0ZWRW
YWx1ZS5nZXQoKTsKKyAgICBzdGF0aWMgUmVmQ291bnRlZEhGT05UKiBkZWxldGVkVmFsdWUgPQor
ICAgICAgICBSZWZDb3VudGVkSEZPTlQ6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PEhGT05UPigt
MSkpLmxlYWtSZWYoKTsKKyAgICByZXR1cm4gZGVsZXRlZFZhbHVlOwogfQogCiBTQ1JJUFRfRk9O
VFBST1BFUlRJRVMqIEZvbnRQbGF0Zm9ybURhdGE6OnNjcmlwdEZvbnRQcm9wZXJ0aWVzKCkgY29u
c3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107008</attachid>
            <date>2011-09-11 14:24:31 -0700</date>
            <delta_ts>2011-09-12 06:23:37 -0700</delta_ts>
            <desc>Proposed fix for bug 67906.</desc>
            <filename>bug_67906b.patch</filename>
            <type>text/plain</type>
            <size>1527</size>
            <attacher name="Marshall Greenblatt">marshall</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDk0ODU2KQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDEzIEBADQorMjAxMS0wOS0xMSAgTWFyc2hhbGwgR3JlZW5ibGF0dCAgPG1h
cnNoYWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBVc2UgbGVha1JlZigpIHRvIGludGVudGlv
bmFsbHkgbGVhayB0aGUgc3RhdGljIFJlZkNvdW50ZWRIRk9OVCBvYmplY3QgcmV0dXJuZWQgZnJv
bQorICAgICAgICBGb250UGxhdGZvcm1EYXRhOjpoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkg
dG8gYXZvaWQgZ2xvYmFsIGRlc3RydWN0b3Igb3JkZXJpbmcgcHJvYmxlbXMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzkwNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNocm9taXVtV2luLmNwcDoKKwogMjAxMS0wOS0wOSAg
UGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIg
SW5zcGVjdG9yOiBpbnRyb2R1Y2UgSmF2YVNjcmlwdFNvdXJjZUZyYW1lIGNsYXNzLgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21p
dW1XaW4uY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA5NDg1NikNCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFDaHJv
bWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkNCkBAIC0xMTYsOSArMTE2LDkgQEANCiAKIEZvbnRQ
bGF0Zm9ybURhdGE6OlJlZkNvdW50ZWRIRk9OVCogRm9udFBsYXRmb3JtRGF0YTo6aGFzaFRhYmxl
RGVsZXRlZEZvbnRWYWx1ZSgpCiB7Ci0gICAgc3RhdGljIFJlZlB0cjxSZWZDb3VudGVkSEZPTlQ+
IGRlbGV0ZWRWYWx1ZSA9Ci0gICAgICAgIFJlZkNvdW50ZWRIRk9OVDo6Y3JlYXRlKHJlaW50ZXJw
cmV0X2Nhc3Q8SEZPTlQ+KC0xKSk7Ci0gICAgcmV0dXJuIGRlbGV0ZWRWYWx1ZS5nZXQoKTsKKyAg
ICBzdGF0aWMgUmVmQ291bnRlZEhGT05UKiBkZWxldGVkVmFsdWUgPQorICAgICAgICBSZWZDb3Vu
dGVkSEZPTlQ6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PEhGT05UPigtMSkpLmxlYWtSZWYoKTsK
KyAgICByZXR1cm4gZGVsZXRlZFZhbHVlOwogfQogCiBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIEZv
bnRQbGF0Zm9ybURhdGE6OnNjcmlwdEZvbnRQcm9wZXJ0aWVzKCkgY29uc3QK
</data>
<flag name="review"
          id="103589"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107045</attachid>
            <date>2011-09-12 06:23:37 -0700</date>
            <delta_ts>2011-09-20 15:38:43 -0700</delta_ts>
            <desc>Proposed Fix #3</desc>
            <filename>bug_67906c.patch</filename>
            <type>text/plain</type>
            <size>1598</size>
            <attacher name="Marshall Greenblatt">marshall</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDk0ODU2KQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDEzIEBADQorMjAxMS0wOS0xMSAgTWFyc2hhbGwgR3JlZW5ibGF0dCAgPG1h
cnNoYWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBVc2UgREVGSU5FX1NUQVRJQ19MT0NBTCB0
byBpbnRlbnRpb25hbGx5IGxlYWsgdGhlIHN0YXRpYyBSZWZDb3VudGVkSEZPTlQgb2JqZWN0IHJl
dHVybmVkIGZyb20KKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YTo6aGFzaFRhYmxlRGVsZXRlZEZv
bnRWYWx1ZSgpIHRvIGF2b2lkIGdsb2JhbCBkZXN0cnVjdG9yIG9yZGVyaW5nIHByb2JsZW1zLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc5MDYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFDaHJvbWl1bVdpbi5jcHA6CisKIDIw
MTEtMDktMDkgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgV2ViIEluc3BlY3RvcjogaW50cm9kdWNlIEphdmFTY3JpcHRTb3VyY2VGcmFtZSBjbGFz
cy4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3Jt
RGF0YUNocm9taXVtV2luLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNocm9taXVtV2luLmNwcAkocmV2aXNpb24g
OTQ4NTYpDQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZv
cm1EYXRhQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMzgsNiArMzgsNyBAQA0K
IAogI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIlNraWFGb250V2luLmgi
CisjaW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MTE2LDggKzExNyw4IEBADQogCiBGb250UGxhdGZvcm1EYXRhOjpSZWZDb3VudGVkSEZPTlQqIEZv
bnRQbGF0Zm9ybURhdGE6Omhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKQogewotICAgIHN0YXRp
YyBSZWZQdHI8UmVmQ291bnRlZEhGT05UPiBkZWxldGVkVmFsdWUgPQotICAgICAgICBSZWZDb3Vu
dGVkSEZPTlQ6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PEhGT05UPigtMSkpOworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoUmVmUHRyPFJlZkNvdW50ZWRIRk9OVD4sIGRlbGV0ZWRWYWx1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIChSZWZDb3VudGVkSEZPTlQ6OmNyZWF0ZShyZWludGVycHJl
dF9jYXN0PEhGT05UPigtMSkpKSk7CiAgICAgcmV0dXJuIGRlbGV0ZWRWYWx1ZS5nZXQoKTsKIH0K
IAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>