<?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>94636</bug_id>
          
          <creation_ts>2012-08-21 14:27:27 -0700</creation_ts>
          <short_desc>WTF Threading leaks kernel objects on platforms that use pthreads</short_desc>
          <delta_ts>2012-10-10 11:08:44 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          <blocked>94660</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>benjamin</cc>
    
    <cc>ggaren</cc>
    
    <cc>levin+threading</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>701128</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-08-21 14:27:27 -0700</bug_when>
    <thetext>Creating lots of Web workers on Mac platforms leaks lots of Mach ports. Eventually, the process can exhaust its allocation of Mach ports from the kernel, which can then cause all sorts of badness, including the inability to allocate new virtual memory from the kernel. ThreadingPthreads.cpp and ThreadIdentifierDataPthreads.cpp need to be refactored so that we do not leak these kernel resources. I would assume that we also leak kernel resources on other pthreads platforms as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701147</commentid>
    <comment_count>1</comment_count>
      <attachid>159772</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-08-21 14:47:17 -0700</bug_when>
    <thetext>Created attachment 159772
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701173</commentid>
    <comment_count>2</comment_count>
      <attachid>159772</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-08-21 15:19:19 -0700</bug_when>
    <thetext>Comment on attachment 159772
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=159772&amp;action=review

r=me with some style comments.

&gt; Source/WTF/wtf/ThreadingPthreads.cpp:169
&gt; +static pthread_t unsafePthreadHandleForIdentifier(ThreadIdentifier id)

How about calling this &quot;pthreadHandleForIdentifierWithLockAlreadyHeld&quot;.

&gt; Source/WTF/wtf/ThreadingPthreads.cpp:219
&gt; +void threadWasJoined(ThreadIdentifier threadID)

Let&apos;s just move this code into waitForThreadCompletion.

&gt; Source/WTF/wtf/ThreadingPthreads.cpp:258
&gt; +void unsafeThreadWasDetached(ThreadIdentifier threadID)

Let&apos;s inline this, since I don&apos;t like the &quot;unsafe&quot; prefix and inlining will solve that and avoid anyone calling this without the lock.

&gt; Source/WTF/wtf/ThreadingPthreads.cpp:264
&gt; +        delete state;

Let&apos;s use OwnPtr in the map instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701248</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-08-21 16:15:59 -0700</bug_when>
    <thetext>Committed r126208: &lt;http://trac.webkit.org/changeset/126208&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739141</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-10-10 11:08:44 -0700</bug_when>
    <thetext>&lt;rdar://problem/12133833&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159772</attachid>
            <date>2012-08-21 14:47:17 -0700</date>
            <delta_ts>2012-08-21 15:19:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94636-20120821144716.patch</filename>
            <type>text/plain</type>
            <size>11051</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMjYxODcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDEyLTA4LTIxICBNYXJrIEhhaG5lbmJlcmcgIDxt
aGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV1RGIFRocmVhZGluZyBsZWFrcyBrZXJu
ZWwgb2JqZWN0cyBvbiBwbGF0Zm9ybXMgdGhhdCB1c2UgcHRocmVhZHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0NjM2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRpbmcgbG90cyBvZiBXZWIgd29y
a2VycyBvbiBNYWMgcGxhdGZvcm1zIGxlYWtzIGxvdHMgb2YgTWFjaCBwb3J0cy4gRXZlbnR1YWxs
eSwgdGhlIAorICAgICAgICBwcm9jZXNzIGNhbiBleGhhdXN0IGl0cyBhbGxvY2F0aW9uIG9mIE1h
Y2ggcG9ydHMgZnJvbSB0aGUga2VybmVsLCB3aGljaCBjYW4gdGhlbiBjYXVzZSAKKyAgICAgICAg
YWxsIHNvcnRzIG9mIGJhZG5lc3MsIGluY2x1ZGluZyB0aGUgaW5hYmlsaXR5IHRvIGFsbG9jYXRl
IG5ldyB2aXJ0dWFsIG1lbW9yeSBmcm9tIHRoZSAKKyAgICAgICAga2VybmVsLiBUaHJlYWRpbmdQ
dGhyZWFkcy5jcHAgYW5kIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwIG5lZWQgdG8g
YmUgcmVmYWN0b3JlZCAKKyAgICAgICAgc28gdGhhdCB3ZSBkbyBub3QgbGVhayB0aGVzZSBrZXJu
ZWwgcmVzb3VyY2VzLiBJIHdvdWxkIGFzc3VtZSB0aGF0IHdlIGFsc28gbGVhayBrZXJuZWwgCisg
ICAgICAgIHJlc291cmNlcyBvbiBvdGhlciBwdGhyZWFkcyBwbGF0Zm9ybXMgYXMgd2VsbC4KKwor
ICAgICAgICAqIHd0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcDoKKyAgICAgICAg
KFdURik6CisgICAgICAgIChXVEY6OlRocmVhZElkZW50aWZpZXJEYXRhOjp+VGhyZWFkSWRlbnRp
ZmllckRhdGEpOiBOb3cgY2FsbHMgdGhlIGV2ZW50IHRocmVhZERpZEV4aXQsIHdoaWNoIAorICAg
ICAgICBoYW5kbGVzIGFsbCByZWxldmFudCB0ZWFyLWRvd24gb2YgdGhlIHRocmVhZCBtZXRhZGF0
YSBpbiB0aGUgdGhyZWFkIG1hcC4KKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3Bw
OiBBZGRlZCBhIG5ldyBjbGFzcyBjYWxsZWQgUHRocmVhZFN0YXRlIHRoYXQgZW5jYXBzdWxhdGVz
IHRoZSAKKyAgICAgICAgc3RhdGUgb2YgYSB0aHJlYWQgYW5kIHRoZSBwb3NzaWJsZSB0cmFuc2l0
aW9ucyBiZXR3ZWVuIHRob3NlIHN0YXRlcy4KKyAgICAgICAgKFB0aHJlYWRTdGF0ZSk6CisgICAg
ICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6UHRocmVhZFN0YXRlKToKKyAgICAgICAgKFdURjo6UHRo
cmVhZFN0YXRlOjpqb2luYWJsZVN0YXRlKTogUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0
aGUgcHRocmVhZC4KKyAgICAgICAgKFdURjo6UHRocmVhZFN0YXRlOjpwdGhyZWFkSGFuZGxlKTog
UmV0dXJucyB0aGUgcHRocmVhZF90IGZvciB0aGlzIHBhcnRpY3VsYXIgdGhyZWFkLiBUaGlzIG5l
ZWRzIHRvIAorICAgICAgICByZW1haW4gdmFsaWQgZXZlbiBhZnRlciB0aGUgdGhyZWFkIGhhcyBl
eGl0ZWQgYmVjYXVzZSBzb21lYm9keSBjb3VsZCBjb21lIGFsb25nIGF0IGFueSB0aW1lIGluIHRo
ZSAKKyAgICAgICAgZnV0dXJlIGFuZCBjYWxsIGpvaW4gb24gdGhlIHRocmVhZC4KKyAgICAgICAg
KFdURjo6UHRocmVhZFN0YXRlOjpkaWRCZWNvbWVEZXRhY2hlZCk6IFNpZ25hbHMgdGhhdCB0aGUg
dGhyZWFkIHdhcyBkZXRhY2hlZC4KKyAgICAgICAgKFdURjo6UHRocmVhZFN0YXRlOjpkaWRFeGl0
KTogU2lnbmFscyB0aGF0IHRoZSB0aHJlYWQncyBleGl0IGRlc3RydWN0b3IgKH5UaHJlYWRJZGVu
dGlmaWVyRGF0YSkgaGFzIHJ1bi4KKyAgICAgICAgKFdURjo6UHRocmVhZFN0YXRlOjpkaWRKb2lu
KTogU2lnbmFscyB0aGF0IHRoZSB0aHJlYWQgaGFzIGJlZW4gam9pbmVkIG9uIHN1Y2Nlc3NmdWxs
eS4KKyAgICAgICAgKFdURjo6UHRocmVhZFN0YXRlOjpoYXNFeGl0ZWQpOiBSZXR1cm5zIHdoZXRo
ZXIgb3Igbm90IHRoZSB0aHJlYWQncyBleGl0IGRlc3RydWN0b3IgaGFzIHJ1bi4KKyAgICAgICAg
KFdURik6CisgICAgICAgIChXVEY6OmlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUpOiBDaGFuZ2Vk
IHRvIGFsc28gY2hlY2sgaGFzRXhpdGVkKCkgb24gdGhlIHRocmVhZHMgaXQgZmluZHMgaW4gdGhl
IG1hcC4gV2UgCisgICAgICAgIHNob3VsZCBvbmx5IGhhdmUgb25lIHZhbGlkIHB0aHJlYWRfdCBp
biB0aGUgbWFwLCBidXQgdGhlcmUgYXJlIG90aGVyIHB0aHJlYWRfdCdzIHRoYXQgbmVlZCB0byBy
ZW1haW4gaW4gdGhlIAorICAgICAgICB0aHJlYWQgbWFwIGZvciB3aGVuIHNvbWVib2R5IGpvaW5z
IG9uIHRoYXQgdGhyZWFkIGlkIGxhdGVyLgorICAgICAgICAoV1RGOjplc3RhYmxpc2hJZGVudGlm
aWVyRm9yUHRocmVhZEhhbmRsZSk6IENoYW5nZWQgdG8gcHV0IHRoZSBhbGxvY2F0ZSB0aGUgbmV3
IFB0aHJlYWRTdGF0ZSBkYXRhIHN0cnVjdHVyZSBhbmQgCisgICAgICAgIHB1dCBpdCBpbiB0aGUg
bWFwLgorICAgICAgICAoV1RGOjp1bnNhZmVQdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcik6IFVu
c2FmZSBtZWFucyB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4g
dGhlIAorICAgICAgICBjYWxsZXIgaG9sZHMgdGhlIHRocmVhZCBtYXAgbXV0ZXguCisgICAgICAg
IChXVEY6Ond0ZlRocmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RGOjp0aHJlYWRXYXNKb2lu
ZWQpOiBDYWxsZWQgYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aHJlYWQgaGFzIGJlZW4gc3VjY2Vzc2Z1
bGx5IGpvaW5lZCBvbi4gUGVyZm9ybXMgYW55IHJlbGV2YW50IAorICAgICAgICBjbGVhbnVwIHRo
YXQgbmVlZHMgdG8gaGFwcGVuIGlmIHRoZSBqb2luZWQgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRl
ZC4KKyAgICAgICAgKFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb24pOiBDaGFuZ2VkIHRvIGNh
bGwgdGhlIHRocmVhZFdhc0pvaW5lZCBmdW5jdGlvbiBhZnRlciBwdGhyZWFkX2pvaW4gcmV0dXJu
cy4KKyAgICAgICAgKFdURjo6dW5zYWZlVGhyZWFkV2FzRGV0YWNoZWQpOiBQZXJmb3JtcyByZWxl
dmFudCBjbGVhbnVwIGlmIHRoZSB0aHJlYWQgaGFzIGFscmVhZHkgZXhpdGVkLiBPdGhlcndpc2Ug
c2lnbmFscyB0byB0aGUgCisgICAgICAgIFB0aHJlYWRTdGF0ZSB0aGF0IHRoZSB0aHJlYWQgaGFz
IGJlZW4gZGV0YWNoZWQuCisgICAgICAgIChXVEY6OmRldGFjaFRocmVhZCk6IEFkZGVkIGVycm9y
IGxvZ2dpbmcgZm9sbG93aW5nIHRoZSByZXR1cm4gb2YgcHRocmVhZF9kZXRhY2guIEFsc28gYWRk
ZWQgdGhlIGNhbGwgdG8gCisgICAgICAgIHVuc2FmZVRocmVhZFdhc0RldGFjaGVkIGFmdGVyIHB0
aHJlYWRfZGV0YWNoIHJldHVybnMuCisgICAgICAgIChXVEY6OnRocmVhZERpZEV4aXQpOiBGdW5j
dGlvbiBjYWxsZWQgYnkgflRocmVhZElkZW50aWZpZXJEYXRhIHRvIGluZGljYXRlIHRoYXQgdGhl
IHRocmVhZCBoYXMgZXhpdGVkLiAKKyAgICAgICAgT25seSBjbGVhbnMgdXAgYWZ0ZXIgaXRzZWxm
IGlmIHRoZSB0aHJlYWQgaXNuJ3QgSm9pbmFibGUgKGkuZS4gSm9pbmVkIG9yIERldGFjaGVkKS4K
KwogMjAxMi0wOC0yMSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBCdWlsZCBmaXggZm9yIENPTVBJTEVSKE1TVkMpICYmICFDUFUoWDg2KSBhZnRlciBy
MTI2MDIzLgpJbmRleDogU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFk
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQ
dGhyZWFkcy5jcHAJKHJldmlzaW9uIDEyNjE4NykKKysrIFNvdXJjZS9XVEYvd3RmL1RocmVhZElk
ZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMSArNDcsMTEg
QEAgbmFtZXNwYWNlIFdURiB7CiAKIHB0aHJlYWRfa2V5X3QgVGhyZWFkSWRlbnRpZmllckRhdGE6
Om1fa2V5ID0gUFRIUkVBRF9LRVlTX01BWDsKIAotdm9pZCBjbGVhclB0aHJlYWRIYW5kbGVGb3JJ
ZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIpOwordm9pZCB0aHJlYWREaWRFeGl0KFRocmVhZElk
ZW50aWZpZXIpOwogCiBUaHJlYWRJZGVudGlmaWVyRGF0YTo6flRocmVhZElkZW50aWZpZXJEYXRh
KCkKIHsKLSAgICBjbGVhclB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKG1faWRlbnRpZmllcik7
CisgICAgdGhyZWFkRGlkRXhpdChtX2lkZW50aWZpZXIpOwogfQogCiB2b2lkIFRocmVhZElkZW50
aWZpZXJEYXRhOjppbml0aWFsaXplT25jZSgpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmdQdGhyZWFkcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRo
cmVhZHMuY3BwCShyZXZpc2lvbiAxMjYxODcpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQ
dGhyZWFkcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDExICs2MSw0NyBAQAogCiBuYW1lc3Bh
Y2UgV1RGIHsKIAotdHlwZWRlZiBIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIHB0aHJlYWRfdD4g
VGhyZWFkTWFwOworY2xhc3MgUHRocmVhZFN0YXRlIHsKK3B1YmxpYzoKKyAgICBlbnVtIEpvaW5h
YmxlU3RhdGUgeworICAgICAgICBKb2luYWJsZSwgLy8gVGhlIGRlZmF1bHQgdGhyZWFkIHN0YXRl
LiBUaGUgdGhyZWFkIGNhbiBiZSBqb2luZWQgb24uCisKKyAgICAgICAgSm9pbmVkLCAvLyBTb21l
Ym9keSB3YWl0ZWQgb24gdGhpcyB0aHJlYWQgdG8gZXhpdCBhbmQgdGhpcyB0aHJlYWQgZmluYWxs
eSBleGl0ZWQuIFRoaXMgc3RhdGUgaXMgaGVyZSBiZWNhdXNlIHRoZXJlJ3MgY2FuIGJlIGEgCisg
ICAgICAgICAgICAgICAgLy8gcGVyaW9kIG9mIHRpbWUgYmV0d2VlbiB3aGVuIHRoZSB0aHJlYWQg
ZXhpdHMgKHdoaWNoIGNhdXNlcyBwdGhyZWFkX2pvaW4gdG8gcmV0dXJuIGFuZCB0aHJlYWRXYXNK
b2luZWQgdG8gYmUgY2FsbGVkKSAKKyAgICAgICAgICAgICAgICAvLyBhbmQgd2hlbiB0aHJlYWRE
aWRFeGl0IGlzIGNhbGxlZC4gV2UgbmVlZCB0aHJlYWREaWRFeGl0IHRvIHRha2UgY2hhcmdlIGFu
ZCBkZWxldGUgdGhlIHRocmVhZCBkYXRhIHNpbmNlIHRoZXJlJ3MgCisgICAgICAgICAgICAgICAg
Ly8gbm9ib2R5IGVsc2UgdG8gcGljayB1cCB0aGUgc2xhY2sgaW4gdGhpcyBjYXNlIChzaW5jZSB0
aHJlYWRXYXNKb2luZWQgaGFzIGFscmVhZHkgY29tZSBhbmQgZ29uZSkuCisKKyAgICAgICAgRGV0
YWNoZWQgLy8gVGhlIHRocmVhZCBoYXMgYmVlbiBkZXRhY2hlZCBhbmQgY2FuIG5vIGxvbmdlciBi
ZSBqb2luZWQgb24uIEF0IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWQgbXVzdCB0YWtlIGNhcmUgb2Yg
Y2xlYW5pbmcgdXAgYWZ0ZXIgaXRzZWxmLgorICAgIH07CisKKyAgICAvLyBDdXJyZW50bHkgYWxs
IHRocmVhZHMgY3JlYXRlZCBieSBXVEYgc3RhcnQgb3V0IGFzIGpvaW5hYmxlLiAKKyAgICBQdGhy
ZWFkU3RhdGUocHRocmVhZF90IGhhbmRsZSkKKyAgICAgICAgOiBtX2pvaW5hYmxlU3RhdGUoSm9p
bmFibGUpCisgICAgICAgICwgbV9kaWRFeGl0KGZhbHNlKQorICAgICAgICAsIG1fcHRocmVhZEhh
bmRsZShoYW5kbGUpCisgICAgeworICAgIH0KKworICAgIEpvaW5hYmxlU3RhdGUgam9pbmFibGVT
dGF0ZSgpIHsgcmV0dXJuIG1fam9pbmFibGVTdGF0ZTsgfQorICAgIHB0aHJlYWRfdCBwdGhyZWFk
SGFuZGxlKCkgeyByZXR1cm4gbV9wdGhyZWFkSGFuZGxlOyB9CisgICAgdm9pZCBkaWRCZWNvbWVE
ZXRhY2hlZCgpIHsgbV9qb2luYWJsZVN0YXRlID0gRGV0YWNoZWQ7IH0KKyAgICB2b2lkIGRpZEV4
aXQoKSB7IG1fZGlkRXhpdCA9IHRydWU7IH0KKyAgICB2b2lkIGRpZEpvaW4oKSB7IG1fam9pbmFi
bGVTdGF0ZSA9IEpvaW5lZDsgfQorICAgIGJvb2wgaGFzRXhpdGVkKCkgeyByZXR1cm4gbV9kaWRF
eGl0OyB9CisKK3ByaXZhdGU6CisgICAgSm9pbmFibGVTdGF0ZSBtX2pvaW5hYmxlU3RhdGU7Cisg
ICAgYm9vbCBtX2RpZEV4aXQ7CisgICAgcHRocmVhZF90IG1fcHRocmVhZEhhbmRsZTsKK307CisK
K3R5cGVkZWYgSGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBQdGhyZWFkU3RhdGUqPiBUaHJlYWRN
YXA7CiAKIHN0YXRpYyBNdXRleCogYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXg7CiAK
LXZvaWQgY2xlYXJQdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcihUaHJlYWRJZGVudGlmaWVyKTsK
K3ZvaWQgdW5zYWZlVGhyZWFkV2FzRGV0YWNoZWQoVGhyZWFkSWRlbnRpZmllcik7Cit2b2lkIHRo
cmVhZERpZEV4aXQoVGhyZWFkSWRlbnRpZmllcik7Cit2b2lkIHRocmVhZFdhc0pvaW5lZChUaHJl
YWRJZGVudGlmaWVyKTsKIAogc3RhdGljIE11dGV4JiB0aHJlYWRNYXBNdXRleCgpCiB7CkBAIC0x
MTQsNyArMTUwLDcgQEAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllckJ5UHRocgog
CiAgICAgVGhyZWFkTWFwOjppdGVyYXRvciBpID0gdGhyZWFkTWFwKCkuYmVnaW4oKTsKICAgICBm
b3IgKDsgaSAhPSB0aHJlYWRNYXAoKS5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChwdGhyZWFk
X2VxdWFsKGktPnNlY29uZCwgcHRocmVhZEhhbmRsZSkpCisgICAgICAgIGlmIChwdGhyZWFkX2Vx
dWFsKGktPnNlY29uZC0+cHRocmVhZEhhbmRsZSgpLCBwdGhyZWFkSGFuZGxlKSAmJiAhaS0+c2Vj
b25kLT5oYXNFeGl0ZWQoKSkKICAgICAgICAgICAgIHJldHVybiBpLT5maXJzdDsKICAgICB9CiAK
QEAgLTEyNCwzMCArMTYwLDE1IEBAIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJC
eVB0aHIKIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhy
ZWFkSGFuZGxlKGNvbnN0IHB0aHJlYWRfdCYgcHRocmVhZEhhbmRsZSkKIHsKICAgICBBU1NFUlQo
IWlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUocHRocmVhZEhhbmRsZSkpOwotCiAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotCiAgICAgc3RhdGljIFRocmVhZElkZW50
aWZpZXIgaWRlbnRpZmllckNvdW50ID0gMTsKLQotICAgIHRocmVhZE1hcCgpLmFkZChpZGVudGlm
aWVyQ291bnQsIHB0aHJlYWRIYW5kbGUpOwotCisgICAgdGhyZWFkTWFwKCkuYWRkKGlkZW50aWZp
ZXJDb3VudCwgbmV3IFB0aHJlYWRTdGF0ZShwdGhyZWFkSGFuZGxlKSk7CiAgICAgcmV0dXJuIGlk
ZW50aWZpZXJDb3VudCsrOwogfQogCi1zdGF0aWMgcHRocmVhZF90IHB0aHJlYWRIYW5kbGVGb3JJ
ZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgcmV0dXJuIHRocmVhZE1hcCgpLmdldChpZCk7Ci19
Ci0KLXZvaWQgY2xlYXJQdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcihUaHJlYWRJZGVudGlmaWVy
IGlkKQorc3RhdGljIHB0aHJlYWRfdCB1bnNhZmVQdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcihU
aHJlYWRJZGVudGlmaWVyIGlkKQogewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBN
dXRleCgpKTsKLQotICAgIEFTU0VSVCh0aHJlYWRNYXAoKS5jb250YWlucyhpZCkpOwotCi0gICAg
dGhyZWFkTWFwKCkucmVtb3ZlKGlkKTsKKyAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKS0+
cHRocmVhZEhhbmRsZSgpOwogfQogCiBzdGF0aWMgdm9pZCogd3RmVGhyZWFkRW50cnlQb2ludCh2
b2lkKiBwYXJhbSkKQEAgLTE1NSw3ICsxNzYsNiBAQCBzdGF0aWMgdm9pZCogd3RmVGhyZWFkRW50
cnlQb2ludCh2b2lkKiBwCiAgICAgLy8gQmFsYW5jZWQgYnkgLmxlYWtQdHIoKSBpbiBjcmVhdGVU
aHJlYWRJbnRlcm5hbC4KICAgICBPd25QdHI8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPiBpbnZv
Y2F0aW9uID0gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKj4o
cGFyYW0pKTsKICAgICBpbnZvY2F0aW9uLT5mdW5jdGlvbihpbnZvY2F0aW9uLT5kYXRhKTsKLQog
ICAgIHJldHVybiAwOwogfQogCkBAIC0xOTYsMzAgKzIxNiw4MiBAQCB2b2lkIGluaXRpYWxpemVD
dXJyZW50VGhyZWFkSW50ZXJuYWwoY29uCiAgICAgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRp
YWxpemUoaWQpOwogfQogCit2b2lkIHRocmVhZFdhc0pvaW5lZChUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElEKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKKyAg
ICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElEKTsKKyAgICBB
U1NFUlQoc3RhdGUpOworICAgIEFTU0VSVChzdGF0ZS0+am9pbmFibGVTdGF0ZSgpID09IFB0aHJl
YWRTdGF0ZTo6Sm9pbmFibGUpOworCisgICAgLy8gVGhlIHRocmVhZCBoYXMgYWxyZWFkeSBleGl0
ZWQsIHNvIGNsZWFuIHVwIGFmdGVyIGl0LgorICAgIGlmIChzdGF0ZS0+aGFzRXhpdGVkKCkpIHsK
KyAgICAgICAgdGhyZWFkTWFwKCkucmVtb3ZlKHRocmVhZElEKTsKKyAgICAgICAgZGVsZXRlIHN0
YXRlOworICAgIC8vIFRoZSB0aHJlYWQgaGFzbid0IGV4aXRlZCB5ZXQsIHNvIGRvbid0IGNsZWFu
IGFueXRoaW5nIHVwLiBKdXN0IHNpZ25hbCB0aGF0IHdlJ3ZlIGFscmVhZHkgam9pbmVkIG9uIGl0
IHNvIHRoYXQgaXQgd2lsbCBjbGVhbiB1cCBhZnRlciBpdHNlbGYuCisgICAgfSBlbHNlCisgICAg
ICAgIHN0YXRlLT5kaWRKb2luKCk7Cit9CisKIGludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihU
aHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQogeworICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxl
OwogICAgIEFTU0VSVCh0aHJlYWRJRCk7CiAKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZSA9
IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLSAgICBpZiAoIXB0aHJlYWRI
YW5kbGUpCi0gICAgICAgIHJldHVybiAwOworICAgIHsKKyAgICAgICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBsb2NrIGFjcm9zcyB0aGUgY2FsbCB0byBqb2luLCBzaW5jZSB0aGF0IGNhbiBibG9jayBv
dXIgdGhyZWFkIGFuZCBjYXVzZSBkZWFkbG9jay4KKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KHRocmVhZE1hcE11dGV4KCkpOworICAgICAgICBwdGhyZWFkSGFuZGxlID0gdW5zYWZlUHRocmVh
ZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOworICAgICAgICBBU1NFUlQocHRocmVhZEhh
bmRsZSk7CisgICAgfQogCiAgICAgaW50IGpvaW5SZXN1bHQgPSBwdGhyZWFkX2pvaW4ocHRocmVh
ZEhhbmRsZSwgMCk7CisKICAgICBpZiAoam9pblJlc3VsdCA9PSBFREVBRExLKQogICAgICAgICBM
T0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIGZvdW5kIHRvIGJlIGRlYWRsb2NrZWQg
dHJ5aW5nIHRvIHF1aXQiLCB0aHJlYWRJRCk7CisgICAgZWxzZSBpZiAoam9pblJlc3VsdCkKKyAg
ICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgam9p
bmVkLlxuIiwgdGhyZWFkSUQpOworICAgIHRocmVhZFdhc0pvaW5lZCh0aHJlYWRJRCk7CiAKICAg
ICByZXR1cm4gam9pblJlc3VsdDsKIH0KIAordm9pZCB1bnNhZmVUaHJlYWRXYXNEZXRhY2hlZChU
aHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQoreworICAgIFB0aHJlYWRTdGF0ZSogc3RhdGUgPSB0
aHJlYWRNYXAoKS5nZXQodGhyZWFkSUQpOworICAgIEFTU0VSVChzdGF0ZSk7CisgICAgaWYgKHN0
YXRlLT5oYXNFeGl0ZWQoKSkgeworICAgICAgICB0aHJlYWRNYXAoKS5yZW1vdmUodGhyZWFkSUQp
OworICAgICAgICBkZWxldGUgc3RhdGU7CisgICAgfSBlbHNlCisgICAgICAgIHRocmVhZE1hcCgp
LmdldCh0aHJlYWRJRCktPmRpZEJlY29tZURldGFjaGVkKCk7Cit9CisKIHZvaWQgZGV0YWNoVGhy
ZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCiB7CiAgICAgQVNTRVJUKHRocmVhZElEKTsK
IAotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZp
ZXIodGhyZWFkSUQpOwotICAgIGlmICghcHRocmVhZEhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKKyAgICBwdGhyZWFkX3Qg
cHRocmVhZEhhbmRsZSA9IHVuc2FmZVB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElE
KTsKKyAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7CisKKyAgICBpbnQgZGV0YWNoUmVzdWx0ID0g
cHRocmVhZF9kZXRhY2gocHRocmVhZEhhbmRsZSk7CisgICAgaWYgKGRldGFjaFJlc3VsdCkKKyAg
ICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgZGV0
YWNoZWRcbiIsIHRocmVhZElEKTsKKyAgICB1bnNhZmVUaHJlYWRXYXNEZXRhY2hlZCh0aHJlYWRJ
RCk7Cit9CisKK3ZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQor
eworICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKKyAgICBQdGhyZWFk
U3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElEKTsKKyAgICBBU1NFUlQoc3Rh
dGUpOworICAgIAorICAgIHN0YXRlLT5kaWRFeGl0KCk7CiAKLSAgICBwdGhyZWFkX2RldGFjaChw
dGhyZWFkSGFuZGxlKTsKKyAgICBpZiAoc3RhdGUtPmpvaW5hYmxlU3RhdGUoKSAhPSBQdGhyZWFk
U3RhdGU6OkpvaW5hYmxlKSB7CisgICAgICAgIHRocmVhZE1hcCgpLnJlbW92ZSh0aHJlYWRJRCk7
CisgICAgICAgIGRlbGV0ZSBzdGF0ZTsKKyAgICB9CiB9CiAKIHZvaWQgeWllbGQoKQo=
</data>
<flag name="review"
          id="170178"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>