<?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>22567</bug_id>
          
          <creation_ts>2008-11-30 20:07:52 -0800</creation_ts>
          <short_desc>HashTable debug-only data needs to be made usable from multiple threads</short_desc>
          <delta_ts>2008-12-01 06:20:28 -0800</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>All</rep_platform>
          <op_sys>All</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="David Levin">levin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>100796</commentid>
    <comment_count>0</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2008-11-30 20:07:52 -0800</bug_when>
    <thetext>With workers running on threads, HashTable needs to have it use of statics made safe with respect to threads.  Also, HashTable::contains should be threadsafe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100797</commentid>
    <comment_count>1</comment_count>
      <attachid>25619</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2008-11-30 20:24:36 -0800</bug_when>
    <thetext>Created attachment 25619
Fix for bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100798</commentid>
    <comment_count>2</comment_count>
      <attachid>25620</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2008-11-30 20:39:46 -0800</bug_when>
    <thetext>Created attachment 25620
Added copyright to HashTable.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100809</commentid>
    <comment_count>3</comment_count>
      <attachid>25620</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-01 01:43:46 -0800</bug_when>
    <thetext>Comment on attachment 25620
Added copyright to HashTable.h

 HashTableStats::~HashTableStats()
 {
&gt; +    MutexLocker lock(hashTableStatsMutex());

Locking a mutex in static object destructor can cause deadlocks at shutdown if any thread was killed during process shutdown while holding this lock.

&gt;      printf(&quot;\nkhtml::HashTable statistics\n\n&quot;);

This is a good opportunity to rename khtml::HashTable to WTF::HashTable.

&gt;  void HashTableStats::recordCollisionAtCount(int count)
&gt;  {
&gt; +    MutexLocker lock(hashTableStatsMutex());

This works correctly, but only because HashTableStats data members that are used in this function are not used anywhere else (except for HashTableStats dtor). It would help if these data members were re-ordered in HashTableStats to form a single group with a comment explaining how they are used.

&gt; +// Thread safety: HashTable is only thread-safe with respect to the lookup/contains methods.
&gt; +// Any other method use (include any iterators) should have locks around them when used from multiple threads.

I do not believe that this is formally true - lookup is certainly not safe if the table is being modified from another thread at the same time.

But also, this description is quite vague, because it is not clear whether it talks about class-level of object-level thread safety. And it is misguiding, because locking mutexes is not the only form of synchronization that can guarantee safety.

I&apos;m not sure how to best describe HashTable threading model. It is pretty common for container objects to have class-level thread safety, and to have constant methods work on constant objects without synchronization though.

&gt; -        static int numAccesses;
&gt; +        static volatile int numAccesses;

Is this change needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100814</commentid>
    <comment_count>4</comment_count>
      <attachid>25623</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2008-12-01 04:00:48 -0800</bug_when>
    <thetext>Created attachment 25623
Addressed comments.

Thanks.

I&apos;ve made the remaining const methods on HashTable thread safe as well.

&gt; &gt; -        static int numAccesses;
&gt; &gt; +        static volatile int numAccesses;
&gt; Is this change needed?

The function definition includes it &quot;atomicIncrement(int volatile*)&quot;.  The only place I could find this function used was in RefCountedLeakCounter.cpp and the variable that it uses for atomicIncrement is defined as volatile.

After thinking about it more, I realized that this is like the const modifier in a prototype which indicates that the function can handle a volatile int* (as well as an int*), so I&apos;ve removed the volatile for all of these variables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100825</commentid>
    <comment_count>5</comment_count>
      <attachid>25623</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-01 06:17:46 -0800</bug_when>
    <thetext>Comment on attachment 25623
Addressed comments.

&gt; +        Guarded with variable access with a mutex.

An extra &quot;with&quot; here.

&gt; +    // Don&apos;t lock the mutex here bcause it can cause deadlocks at shutdown 
&gt; +    // if any thread was killed during process shutdown while holding the mutex.

Typo: bcause.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100826</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-01 06:20:28 -0800</bug_when>
    <thetext>Committed revision 38859.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25619</attachid>
            <date>2008-11-30 20:24:36 -0800</date>
            <delta_ts>2008-11-30 20:39:46 -0800</delta_ts>
            <desc>Fix for bug.</desc>
            <filename>patch-for-bug22567-rev1.txt</filename>
            <type>text/plain</type>
            <size>5301</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4ODU0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMDgtMTEtMzAgIERhdmlkIExl
dmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjU2NworICAgICAgICBNYWtlIEhhc2hUYWJsZSB1c2Ugb2Ygc3RhdGljIHZhcmlhYmxlcyB0
aHJlYWQtc2FmZSBhY3Jvc3MgaW5zdGFuY2VzLCBhbmQgZW5zdXJlIHRoYXQgSGFzaFRhYmxlOjpj
b250YWlucworICAgICAgICBpcyB0aHJlYWQgc2FmZSBmb3IgdGhlIHNhbWUgSGFzaFRhYmxlIG9i
amVjdCB1c2VkIGluIG11bHRpcGxlIHRocmVhZHMuCisgICAgICAgIAorICAgICAgICBObyBvYnNl
cnZhYmxlIGNoYW5nZSBpbiBiZWhhdmlvciwgc28gbm8gdGVzdC4KKyAgICAgICAgCisgICAgICAg
ICogd3RmL0hhc2hUYWJsZS5jcHA6CisgICAgICAgIChXVEY6Omhhc2hUYWJsZVN0YXRzTXV0ZXgp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGVTdGF0czo6fkhhc2hUYWJsZVN0YXRzKToKKyAgICAg
ICAgKFdURjo6SGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQpOgorICAgICAg
ICBHdWFyZGVkIHdpdGggYSBtdXRleC4KKworICAgICAgICAqIHd0Zi9IYXNoVGFibGUuaDoKKyAg
ICAgICAgKFdURjo6SGFzaFRhYmxlOjpsb29rdXApOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6
Omxvb2t1cEZvcldyaXRpbmcpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmZ1bGxMb29rdXBG
b3JXcml0aW5nKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjphZGQpOgorICAgICAgICAoV1RG
OjpIYXNoVGFibGU6OnJlaW5zZXJ0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpyZW1vdmUp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OnJlaGFzaCk6CisgICAgICAgIENoYW5nZWQgaW5j
cmVtZW50cyBvZiBzdGF0aWMgdmFyaWFibGVzIHRvIHVzZSBhdG9taWNJbmNyZW1lbnQuCisKIDIw
MDgtMTEtMzAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBNYXJrIFJvd2UuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRhYmxlLmNwcAkocmV2aXNpb24g
Mzg4NTQpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsOCArMzQsMTUgQEAgaW50IEhhc2hUYWJsZVN0YXRzOjpudW1SZWluc2VydHM7CiAK
IHN0YXRpYyBIYXNoVGFibGVTdGF0cyBsb2dnZXI7CiAKK3N0YXRpYyBNdXRleCYgaGFzaFRhYmxl
U3RhdHNNdXRleCgpCit7CisgICAgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljKE11dGV4Jiwg
bXV0ZXggPSAqbmV3IE11dGV4KTsKKyAgICByZXR1cm4gbXV0ZXg7Cit9CisKIEhhc2hUYWJsZVN0
YXRzOjp+SGFzaFRhYmxlU3RhdHMoKQogeworICAgIE11dGV4TG9ja2VyIGxvY2soaGFzaFRhYmxl
U3RhdHNNdXRleCgpKTsKICAgICBwcmludGYoIlxua2h0bWw6Okhhc2hUYWJsZSBzdGF0aXN0aWNz
XG5cbiIpOwogICAgIHByaW50ZigiJWQgYWNjZXNzZXNcbiIsIG51bUFjY2Vzc2VzKTsKICAgICBw
cmludGYoIiVkIHRvdGFsIGNvbGxpc2lvbnMsIGF2ZXJhZ2UgJS4yZiBwcm9iZXMgcGVyIGFjY2Vz
c1xuIiwgbnVtQ29sbGlzaW9ucywgMS4wICogKG51bUFjY2Vzc2VzICsgbnVtQ29sbGlzaW9ucykg
LyBudW1BY2Nlc3Nlcyk7CkBAIC00OSw2ICs1Niw3IEBAIEhhc2hUYWJsZVN0YXRzOjp+SGFzaFRh
YmxlU3RhdHMoKQogCiB2b2lkIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50
KGludCBjb3VudCkKIHsKKyAgICBNdXRleExvY2tlciBsb2NrKGhhc2hUYWJsZVN0YXRzTXV0ZXgo
KSk7CiAgICAgaWYgKGNvdW50ID4gbWF4Q29sbGlzaW9ucykKICAgICAgICAgbWF4Q29sbGlzaW9u
cyA9IGNvdW50OwogICAgIG51bUNvbGxpc2lvbnMrKzsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0
Zi9IYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRhYmxl
LmgJKHJldmlzaW9uIDM4ODU0KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0hhc2hUYWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCwxMCBAQAogI2luY2x1ZGUgIkZhc3RNYWxsb2MuaCIK
ICNpbmNsdWRlICJIYXNoVHJhaXRzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKy8vIFRocmVhZCBzYWZldHk6IEhhc2hUYWJsZSBp
cyBvbmx5IHRocmVhZC1zYWZlIHdpdGggcmVzcGVjdCB0byB0aGUgbG9va3VwL2NvbnRhaW5zIG1l
dGhvZHMuCisvLyBBbnkgb3RoZXIgbWV0aG9kIHVzZSAoaW5jbHVkZSBhbnkgaXRlcmF0b3JzKSBz
aG91bGQgaGF2ZSBsb2NrcyBhcm91bmQgdGhlbSB3aGVuIHVzZWQgZnJvbSBtdWx0aXBsZSB0aHJl
YWRzLgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNDIsMTMgKzQ2LDEzIEBAIG5hbWVzcGFjZSBX
VEYgewogCiAgICAgc3RydWN0IEhhc2hUYWJsZVN0YXRzIHsKICAgICAgICAgfkhhc2hUYWJsZVN0
YXRzKCk7Ci0gICAgICAgIHN0YXRpYyBpbnQgbnVtQWNjZXNzZXM7CisgICAgICAgIHN0YXRpYyB2
b2xhdGlsZSBpbnQgbnVtQWNjZXNzZXM7CiAgICAgICAgIHN0YXRpYyBpbnQgbnVtQ29sbGlzaW9u
czsKICAgICAgICAgc3RhdGljIGludCBjb2xsaXNpb25HcmFwaFs0MDk2XTsKICAgICAgICAgc3Rh
dGljIGludCBtYXhDb2xsaXNpb25zOwotICAgICAgICBzdGF0aWMgaW50IG51bVJlaGFzaGVzOwot
ICAgICAgICBzdGF0aWMgaW50IG51bVJlbW92ZXM7Ci0gICAgICAgIHN0YXRpYyBpbnQgbnVtUmVp
bnNlcnRzOworICAgICAgICBzdGF0aWMgdm9sYXRpbGUgaW50IG51bVJlaGFzaGVzOworICAgICAg
ICBzdGF0aWMgdm9sYXRpbGUgaW50IG51bVJlbW92ZXM7CisgICAgICAgIHN0YXRpYyB2b2xhdGls
ZSBpbnQgbnVtUmVpbnNlcnRzOwogICAgICAgICBzdGF0aWMgdm9pZCByZWNvcmRDb2xsaXNpb25B
dENvdW50KGludCBjb3VudCk7CiAgICAgfTsKIApAQCAtNDY2LDcgKzQ3MCw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFU
UwotICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKKyAgICAgICAgYXRvbWlj
SW5jcmVtZW50KCZIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXMpOwogICAgICAgICBpbnQgcHJv
YmVDb3VudCA9IDA7CiAjZW5kaWYKIApAQCAtNTExLDcgKzUxNSw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICBpbnQgaSA9IGggJiBzaXplTWFzazsKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NU
QVRTCi0gICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzOworICAgICAgICBhdG9t
aWNJbmNyZW1lbnQoJkhhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3Nlcyk7CiAgICAgICAgIGludCBw
cm9iZUNvdW50ID0gMDsKICNlbmRpZgogCkBAIC01NjMsNyArNTY3LDcgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgIGludCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVf
U1RBVFMKLSAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CisgICAgICAgIGF0
b21pY0luY3JlbWVudCgmSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzKTsKICAgICAgICAgaW50
IHByb2JlQ291bnQgPSAwOwogI2VuZGlmCiAKQEAgLTYyMyw3ICs2MjcsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgaW50IGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hBU0hUQUJM
RV9TVEFUUwotICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKKyAgICAgICAg
YXRvbWljSW5jcmVtZW50KCZIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXMpOwogICAgICAgICBp
bnQgcHJvYmVDb3VudCA9IDA7CiAjZW5kaWYKIApAQCAtNzM4LDcgKzc0Miw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBBU1NFUlQoIWxvb2t1cEZvcldyaXRpbmcoRXh0cmFjdG9yOjpleHRy
YWN0KGVudHJ5KSkuc2Vjb25kKTsKICAgICAgICAgQVNTRVJUKCFpc0RlbGV0ZWRCdWNrZXQoKihs
b29rdXBGb3JXcml0aW5nKEV4dHJhY3Rvcjo6ZXh0cmFjdChlbnRyeSkpLmZpcnN0KSkpOwogI2lm
IERVTVBfSEFTSFRBQkxFX1NUQVRTCi0gICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bVJlaW5z
ZXJ0czsKKyAgICAgICAgYXRvbWljSW5jcmVtZW50KCZIYXNoVGFibGVTdGF0czo6bnVtUmVpbnNl
cnRzKTsKICNlbmRpZgogCiAgICAgICAgIE1vdmVyPFZhbHVlVHlwZSwgVHJhaXRzOjpuZWVkc0Rl
c3RydWN0aW9uPjo6bW92ZShlbnRyeSwgKmxvb2t1cEZvcldyaXRpbmcoRXh0cmFjdG9yOjpleHRy
YWN0KGVudHJ5KSkuZmlyc3QpOwpAQCAtODAxLDcgKzgwNSw3IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmUoVmFsdWVUeXBlKiBwb3MpCiAgICAgewogI2lmIERV
TVBfSEFTSFRBQkxFX1NUQVRTCi0gICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bVJlbW92ZXM7
CisgICAgICAgIGF0b21pY0luY3JlbWVudCgmSGFzaFRhYmxlU3RhdHM6Om51bVJlbW92ZXMpOwog
I2VuZGlmCiAKICAgICAgICAgZGVsZXRlQnVja2V0KCpwb3MpOwpAQCAtODg3LDcgKzg5MSw3IEBA
IG5hbWVzcGFjZSBXVEYgewogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAgaWYg
KG9sZFRhYmxlU2l6ZSAhPSAwKQotICAgICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtUmVo
YXNoZXM7CisgICAgICAgICAgICBhdG9taWNJbmNyZW1lbnQoJkhhc2hUYWJsZVN0YXRzOjpudW1S
ZWhhc2hlcyk7CiAjZW5kaWYKIAogICAgICAgICBtX3RhYmxlU2l6ZSA9IG5ld1RhYmxlU2l6ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25620</attachid>
            <date>2008-11-30 20:39:46 -0800</date>
            <delta_ts>2008-12-01 04:00:48 -0800</delta_ts>
            <desc>Added copyright to HashTable.h</desc>
            <filename>patch-for-bug22567-rev2.txt</filename>
            <type>text/plain</type>
            <size>5584</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4ODU0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMDgtMTEtMzAgIERhdmlkIExl
dmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjU2NworICAgICAgICBNYWtlIEhhc2hUYWJsZSB1c2Ugb2Ygc3RhdGljIHZhcmlhYmxlcyB0
aHJlYWQtc2FmZSBhY3Jvc3MgaW5zdGFuY2VzLCBhbmQgZW5zdXJlIHRoYXQgSGFzaFRhYmxlOjpj
b250YWlucworICAgICAgICBpcyB0aHJlYWQgc2FmZSBmb3IgdGhlIHNhbWUgSGFzaFRhYmxlIG9i
amVjdCB1c2VkIGluIG11bHRpcGxlIHRocmVhZHMuCisgICAgICAgIAorICAgICAgICBObyBvYnNl
cnZhYmxlIGNoYW5nZSBpbiBiZWhhdmlvciwgc28gbm8gdGVzdC4KKyAgICAgICAgCisgICAgICAg
ICogd3RmL0hhc2hUYWJsZS5jcHA6CisgICAgICAgIChXVEY6Omhhc2hUYWJsZVN0YXRzTXV0ZXgp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGVTdGF0czo6fkhhc2hUYWJsZVN0YXRzKToKKyAgICAg
ICAgKFdURjo6SGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQpOgorICAgICAg
ICBHdWFyZGVkIHdpdGggYSBtdXRleC4KKworICAgICAgICAqIHd0Zi9IYXNoVGFibGUuaDoKKyAg
ICAgICAgKFdURjo6SGFzaFRhYmxlOjpsb29rdXApOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6
Omxvb2t1cEZvcldyaXRpbmcpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmZ1bGxMb29rdXBG
b3JXcml0aW5nKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjphZGQpOgorICAgICAgICAoV1RG
OjpIYXNoVGFibGU6OnJlaW5zZXJ0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpyZW1vdmUp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OnJlaGFzaCk6CisgICAgICAgIENoYW5nZWQgaW5j
cmVtZW50cyBvZiBzdGF0aWMgdmFyaWFibGVzIHRvIHVzZSBhdG9taWNJbmNyZW1lbnQuCisKIDIw
MDgtMTEtMzAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBNYXJrIFJvd2UuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRhYmxlLmNwcAkocmV2aXNpb24g
Mzg4NTQpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsOCArMzQsMTUgQEAgaW50IEhhc2hUYWJsZVN0YXRzOjpudW1SZWluc2VydHM7CiAK
IHN0YXRpYyBIYXNoVGFibGVTdGF0cyBsb2dnZXI7CiAKK3N0YXRpYyBNdXRleCYgaGFzaFRhYmxl
U3RhdHNNdXRleCgpCit7CisgICAgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljKE11dGV4Jiwg
bXV0ZXggPSAqbmV3IE11dGV4KTsKKyAgICByZXR1cm4gbXV0ZXg7Cit9CisKIEhhc2hUYWJsZVN0
YXRzOjp+SGFzaFRhYmxlU3RhdHMoKQogeworICAgIE11dGV4TG9ja2VyIGxvY2soaGFzaFRhYmxl
U3RhdHNNdXRleCgpKTsKICAgICBwcmludGYoIlxua2h0bWw6Okhhc2hUYWJsZSBzdGF0aXN0aWNz
XG5cbiIpOwogICAgIHByaW50ZigiJWQgYWNjZXNzZXNcbiIsIG51bUFjY2Vzc2VzKTsKICAgICBw
cmludGYoIiVkIHRvdGFsIGNvbGxpc2lvbnMsIGF2ZXJhZ2UgJS4yZiBwcm9iZXMgcGVyIGFjY2Vz
c1xuIiwgbnVtQ29sbGlzaW9ucywgMS4wICogKG51bUFjY2Vzc2VzICsgbnVtQ29sbGlzaW9ucykg
LyBudW1BY2Nlc3Nlcyk7CkBAIC00OSw2ICs1Niw3IEBAIEhhc2hUYWJsZVN0YXRzOjp+SGFzaFRh
YmxlU3RhdHMoKQogCiB2b2lkIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50
KGludCBjb3VudCkKIHsKKyAgICBNdXRleExvY2tlciBsb2NrKGhhc2hUYWJsZVN0YXRzTXV0ZXgo
KSk7CiAgICAgaWYgKGNvdW50ID4gbWF4Q29sbGlzaW9ucykKICAgICAgICAgbWF4Q29sbGlzaW9u
cyA9IGNvdW50OwogICAgIG51bUNvbGxpc2lvbnMrKzsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0
Zi9IYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRhYmxl
LmgJKHJldmlzaW9uIDM4ODU0KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0hhc2hUYWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggRGF2aWQgTGV2aW4gPGxldmluQGNocm9taXVtLm9yZz4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjQsNiArMjUsMTAgQEAKICNpbmNsdWRlICJGYXN0TWFsbG9jLmgiCiAj
aW5jbHVkZSAiSGFzaFRyYWl0cy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisvLyBUaHJlYWQgc2FmZXR5OiBIYXNoVGFibGUgaXMg
b25seSB0aHJlYWQtc2FmZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGxvb2t1cC9jb250YWlucyBtZXRo
b2RzLgorLy8gQW55IG90aGVyIG1ldGhvZCB1c2UgKGluY2x1ZGUgYW55IGl0ZXJhdG9ycykgc2hv
dWxkIGhhdmUgbG9ja3MgYXJvdW5kIHRoZW0gd2hlbiB1c2VkIGZyb20gbXVsdGlwbGUgdGhyZWFk
cy4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTQyLDEzICs0NywxMyBAQCBuYW1lc3BhY2UgV1RG
IHsKIAogICAgIHN0cnVjdCBIYXNoVGFibGVTdGF0cyB7CiAgICAgICAgIH5IYXNoVGFibGVTdGF0
cygpOwotICAgICAgICBzdGF0aWMgaW50IG51bUFjY2Vzc2VzOworICAgICAgICBzdGF0aWMgdm9s
YXRpbGUgaW50IG51bUFjY2Vzc2VzOwogICAgICAgICBzdGF0aWMgaW50IG51bUNvbGxpc2lvbnM7
CiAgICAgICAgIHN0YXRpYyBpbnQgY29sbGlzaW9uR3JhcGhbNDA5Nl07CiAgICAgICAgIHN0YXRp
YyBpbnQgbWF4Q29sbGlzaW9uczsKLSAgICAgICAgc3RhdGljIGludCBudW1SZWhhc2hlczsKLSAg
ICAgICAgc3RhdGljIGludCBudW1SZW1vdmVzOwotICAgICAgICBzdGF0aWMgaW50IG51bVJlaW5z
ZXJ0czsKKyAgICAgICAgc3RhdGljIHZvbGF0aWxlIGludCBudW1SZWhhc2hlczsKKyAgICAgICAg
c3RhdGljIHZvbGF0aWxlIGludCBudW1SZW1vdmVzOworICAgICAgICBzdGF0aWMgdm9sYXRpbGUg
aW50IG51bVJlaW5zZXJ0czsKICAgICAgICAgc3RhdGljIHZvaWQgcmVjb3JkQ29sbGlzaW9uQXRD
b3VudChpbnQgY291bnQpOwogICAgIH07CiAKQEAgLTQ2Niw3ICs0NzEsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgICAgIHJldHVybiAwOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMK
LSAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CisgICAgICAgIGF0b21pY0lu
Y3JlbWVudCgmSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzKTsKICAgICAgICAgaW50IHByb2Jl
Q291bnQgPSAwOwogI2VuZGlmCiAKQEAgLTUxMSw3ICs1MTYsNyBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgaW50IGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFU
UwotICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKKyAgICAgICAgYXRvbWlj
SW5jcmVtZW50KCZIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXMpOwogICAgICAgICBpbnQgcHJv
YmVDb3VudCA9IDA7CiAjZW5kaWYKIApAQCAtNTYzLDcgKzU2OCw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICBpbnQgaSA9IGggJiBzaXplTWFzazsKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NU
QVRTCi0gICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzOworICAgICAgICBhdG9t
aWNJbmNyZW1lbnQoJkhhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3Nlcyk7CiAgICAgICAgIGludCBw
cm9iZUNvdW50ID0gMDsKICNlbmRpZgogCkBAIC02MjMsNyArNjI4LDcgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgIGludCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVf
U1RBVFMKLSAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CisgICAgICAgIGF0
b21pY0luY3JlbWVudCgmSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzKTsKICAgICAgICAgaW50
IHByb2JlQ291bnQgPSAwOwogI2VuZGlmCiAKQEAgLTczOCw3ICs3NDMsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgQVNTRVJUKCFsb29rdXBGb3JXcml0aW5nKEV4dHJhY3Rvcjo6ZXh0cmFj
dChlbnRyeSkpLnNlY29uZCk7CiAgICAgICAgIEFTU0VSVCghaXNEZWxldGVkQnVja2V0KCoobG9v
a3VwRm9yV3JpdGluZyhFeHRyYWN0b3I6OmV4dHJhY3QoZW50cnkpKS5maXJzdCkpKTsKICNpZiBE
VU1QX0hBU0hUQUJMRV9TVEFUUwotICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1SZWluc2Vy
dHM7CisgICAgICAgIGF0b21pY0luY3JlbWVudCgmSGFzaFRhYmxlU3RhdHM6Om51bVJlaW5zZXJ0
cyk7CiAjZW5kaWYKIAogICAgICAgICBNb3ZlcjxWYWx1ZVR5cGUsIFRyYWl0czo6bmVlZHNEZXN0
cnVjdGlvbj46Om1vdmUoZW50cnksICpsb29rdXBGb3JXcml0aW5nKEV4dHJhY3Rvcjo6ZXh0cmFj
dChlbnRyeSkpLmZpcnN0KTsKQEAgLTgwMSw3ICs4MDYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlKFZhbHVlVHlwZSogcG9zKQogICAgIHsKICNpZiBEVU1Q
X0hBU0hUQUJMRV9TVEFUUwotICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1SZW1vdmVzOwor
ICAgICAgICBhdG9taWNJbmNyZW1lbnQoJkhhc2hUYWJsZVN0YXRzOjpudW1SZW1vdmVzKTsKICNl
bmRpZgogCiAgICAgICAgIGRlbGV0ZUJ1Y2tldCgqcG9zKTsKQEAgLTg4Nyw3ICs4OTIsNyBAQCBu
YW1lc3BhY2UgV1RGIHsKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgIGlmIChv
bGRUYWJsZVNpemUgIT0gMCkKLSAgICAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bVJlaGFz
aGVzOworICAgICAgICAgICAgYXRvbWljSW5jcmVtZW50KCZIYXNoVGFibGVTdGF0czo6bnVtUmVo
YXNoZXMpOwogI2VuZGlmCiAKICAgICAgICAgbV90YWJsZVNpemUgPSBuZXdUYWJsZVNpemU7Cg==
</data>
<flag name="review"
          id="11937"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25623</attachid>
            <date>2008-12-01 04:00:48 -0800</date>
            <delta_ts>2008-12-01 06:17:46 -0800</delta_ts>
            <desc>Addressed comments.</desc>
            <filename>patch-for-bug22567-rev4.txt</filename>
            <type>text/plain</type>
            <size>7637</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4ODU4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDgtMTItMDEgIERhdmlkIExl
dmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjU2NworICAgICAgICBNYWtlIEhhc2hUYWJsZSB3b3JrIGFzIGV4cGVjdGVkIHdpdGggcmVz
cGVjdCB0byB0aHJlYWRzLiBTcGVjaWZpY2FsbHksIGl0IGhhcyBjbGFzcy1sZXZlbAorICAgICAg
ICB0aHJlYWQgc2FmZXR5IGFuZCBjb25zdGFudCBtZXRob2RzIHdvcmsgb24gY29uc3RhbnQgb2Jq
ZWN0cyB3aXRob3V0IHN5bmNocm9uaXphdGlvbi4KKyAgICAgICAgCisgICAgICAgIE5vIG9ic2Vy
dmFibGUgY2hhbmdlIGluIGJlaGF2aW9yLCBzbyBubyB0ZXN0LgorCisgICAgICAgICogd3RmL0hh
c2hUYWJsZS5jcHA6CisgICAgICAgIChXVEY6Omhhc2hUYWJsZVN0YXRzTXV0ZXgpOgorICAgICAg
ICAoV1RGOjpIYXNoVGFibGVTdGF0czo6fkhhc2hUYWJsZVN0YXRzKToKKyAgICAgICAgKFdURjo6
SGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQpOgorICAgICAgICBHdWFyZGVk
IHdpdGggdmFyaWFibGUgYWNjZXNzIHdpdGggYSBtdXRleC4KKworICAgICAgICAqIHd0Zi9IYXNo
VGFibGUuaDoKKyAgICAgICAgKFdURjo6Ojpsb29rdXApOgorICAgICAgICAoV1RGOjo6Omxvb2t1
cEZvcldyaXRpbmcpOgorICAgICAgICAoV1RGOjo6OmZ1bGxMb29rdXBGb3JXcml0aW5nKToKKyAg
ICAgICAgKFdURjo6OjphZGQpOgorICAgICAgICAoV1RGOjo6OnJlaW5zZXJ0KToKKyAgICAgICAg
KFdURjo6OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjo6OnJlaGFzaCk6CisgICAgICAgIENoYW5n
ZWQgaW5jcmVtZW50cyBvZiBzdGF0aWMgdmFyaWFibGVzIHRvIHVzZSBhdG9taWNJbmNyZW1lbnQu
CisKKyAgICAgICAgKFdURjo6OjppbnZhbGlkYXRlSXRlcmF0b3JzKToKKyAgICAgICAgKFdURjo6
YWRkSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpyZW1vdmVJdGVyYXRvcik6CisgICAgICAgIEd1
YXJkZWQgbXV0YWJsZSBhY2Nlc3Mgd2l0aCBhIG11dGV4LgorCiAyMDA4LTExLTI5ICBHYXZpbiBC
YXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBDYW1yb24gWndhcmljaC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVGFibGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVGFibGUuY3BwCShyZXZpc2lv
biAzODg1NSkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw5ICszNCwxNyBAQCBpbnQgSGFzaFRhYmxlU3RhdHM6Om51bVJlaW5zZXJ0czsK
IAogc3RhdGljIEhhc2hUYWJsZVN0YXRzIGxvZ2dlcjsKIAorc3RhdGljIE11dGV4JiBoYXNoVGFi
bGVTdGF0c011dGV4KCkKK3sKKyAgICBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoTXV0ZXgm
LCBtdXRleCA9ICpuZXcgTXV0ZXgpOworICAgIHJldHVybiBtdXRleDsKK30KKwogSGFzaFRhYmxl
U3RhdHM6On5IYXNoVGFibGVTdGF0cygpCiB7Ci0gICAgcHJpbnRmKCJcbmtodG1sOjpIYXNoVGFi
bGUgc3RhdGlzdGljc1xuXG4iKTsKKyAgICAvLyBEb24ndCBsb2NrIHRoZSBtdXRleCBoZXJlIGJj
YXVzZSBpdCBjYW4gY2F1c2UgZGVhZGxvY2tzIGF0IHNodXRkb3duIAorICAgIC8vIGlmIGFueSB0
aHJlYWQgd2FzIGtpbGxlZCBkdXJpbmcgcHJvY2VzcyBzaHV0ZG93biB3aGlsZSBob2xkaW5nIHRo
ZSBtdXRleC4KKyAgICBwcmludGYoIlxuV1RGOjpIYXNoVGFibGUgc3RhdGlzdGljc1xuXG4iKTsK
ICAgICBwcmludGYoIiVkIGFjY2Vzc2VzXG4iLCBudW1BY2Nlc3Nlcyk7CiAgICAgcHJpbnRmKCIl
ZCB0b3RhbCBjb2xsaXNpb25zLCBhdmVyYWdlICUuMmYgcHJvYmVzIHBlciBhY2Nlc3NcbiIsIG51
bUNvbGxpc2lvbnMsIDEuMCAqIChudW1BY2Nlc3NlcyArIG51bUNvbGxpc2lvbnMpIC8gbnVtQWNj
ZXNzZXMpOwogICAgIHByaW50ZigibG9uZ2VzdCBjb2xsaXNpb24gY2hhaW46ICVkXG4iLCBtYXhD
b2xsaXNpb25zKTsKQEAgLTQ5LDYgKzU3LDcgQEAgSGFzaFRhYmxlU3RhdHM6On5IYXNoVGFibGVT
dGF0cygpCiAKIHZvaWQgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQoaW50
IGNvdW50KQogeworICAgIE11dGV4TG9ja2VyIGxvY2soaGFzaFRhYmxlU3RhdHNNdXRleCgpKTsK
ICAgICBpZiAoY291bnQgPiBtYXhDb2xsaXNpb25zKQogICAgICAgICBtYXhDb2xsaXNpb25zID0g
Y291bnQ7CiAgICAgbnVtQ29sbGlzaW9ucysrOwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0hh
c2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVGFibGUuaAko
cmV2aXNpb24gMzg4NTUpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBEYXZpZCBMZXZpbiA8bGV2aW5AY2hyb21pdW0ub3JnPgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNCw2ICsyNSw3IEBACiAjaW5jbHVkZSAiRmFzdE1hbGxvYy5oIgogI2luY2x1
ZGUgIkhhc2hUcmFpdHMuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTQyLDEzICs0NCwxOSBA
QCBuYW1lc3BhY2UgV1RGIHsKIAogICAgIHN0cnVjdCBIYXNoVGFibGVTdGF0cyB7CiAgICAgICAg
IH5IYXNoVGFibGVTdGF0cygpOworICAgICAgICAvLyBBbGwgb2YgdGhlIHZhcmlhYmxlcyBhcmUg
YWNjZXNzZWQgaW4gfkhhc2hUYWJsZVN0YXRzIHdoZW4gdGhlIHN0YXRpYyBzdHJ1Y3QgaXMgZGVz
dHJveWVkLgorCisgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBhbGwgYXRv
bWljYWxseSBpbmNyZW1lbnRlZCB3aGVuIG1vZGlmaWVkLgogICAgICAgICBzdGF0aWMgaW50IG51
bUFjY2Vzc2VzOwotICAgICAgICBzdGF0aWMgaW50IG51bUNvbGxpc2lvbnM7Ci0gICAgICAgIHN0
YXRpYyBpbnQgY29sbGlzaW9uR3JhcGhbNDA5Nl07Ci0gICAgICAgIHN0YXRpYyBpbnQgbWF4Q29s
bGlzaW9uczsKICAgICAgICAgc3RhdGljIGludCBudW1SZWhhc2hlczsKICAgICAgICAgc3RhdGlj
IGludCBudW1SZW1vdmVzOwogICAgICAgICBzdGF0aWMgaW50IG51bVJlaW5zZXJ0czsKKworICAg
ICAgICAvLyBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUgb25seSBtb2RpZmllZCBpbiB0aGUg
cmVjb3JkQ29sbGlzaW9uQXRDb3VudCBtZXRob2Qgd2l0aGluIGEgbXV0ZXguCisgICAgICAgIHN0
YXRpYyBpbnQgbWF4Q29sbGlzaW9uczsKKyAgICAgICAgc3RhdGljIGludCBudW1Db2xsaXNpb25z
OworICAgICAgICBzdGF0aWMgaW50IGNvbGxpc2lvbkdyYXBoWzQwOTZdOworCiAgICAgICAgIHN0
YXRpYyB2b2lkIHJlY29yZENvbGxpc2lvbkF0Q291bnQoaW50IGNvdW50KTsKICAgICB9OwogCkBA
IC0yMDEsNiArMjA5LDggQEAgbmFtZXNwYWNlIFdURiB7CiAKICNpZiBDSEVDS19IQVNIVEFCTEVf
SVRFUkFUT1JTCiAgICAgcHVibGljOgorICAgICAgICAvLyBBbnkgbW9kaWZpY2F0aW9ucyBvZiB0
aGUgbV9uZXh0IG9yIG1fcHJldmlvdXMgb2YgYW4gaXRlcmF0b3IgdGhhdCBpcyBpbiBhIGxpbmtl
ZCBsaXN0IG9mIGEgSGFzaFRhYmxlOjptX2l0ZXJhdG9yLAorICAgICAgICAvLyBzaG91bGQgYmUg
Z3VhcmRlZCB3aXRoIG1fdGFibGUtPm1fbXV0ZXguCiAgICAgICAgIG11dGFibGUgY29uc3QgSGFz
aFRhYmxlVHlwZSogbV90YWJsZTsKICAgICAgICAgbXV0YWJsZSBjb25zdF9pdGVyYXRvciogbV9u
ZXh0OwogICAgICAgICBtdXRhYmxlIGNvbnN0X2l0ZXJhdG9yKiBtX3ByZXZpb3VzOwpAQCAtMzk3
LDcgKzQwNyw5IEBAIG5hbWVzcGFjZSBXVEYgewogCiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJB
VE9SUwogICAgIHB1YmxpYzoKKyAgICAgICAgLy8gQWxsIGFjY2VzcyB0byBtX2l0ZXJhdG9ycyBz
aG91bGQgYmUgZ3VhcmRlZCB3aXRoIG1fbXV0ZXguCiAgICAgICAgIG11dGFibGUgY29uc3RfaXRl
cmF0b3IqIG1faXRlcmF0b3JzOworICAgICAgICBtdXRhYmxlIE11dGV4IG1fbXV0ZXg7CiAjZW5k
aWYKICAgICB9OwogCkBAIC00NjYsNyArNDc4LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAg
ICAgICByZXR1cm4gMDsKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCi0gICAgICAgICsrSGFz
aFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzOworICAgICAgICBhdG9taWNJbmNyZW1lbnQoJkhhc2hU
YWJsZVN0YXRzOjpudW1BY2Nlc3Nlcyk7CiAgICAgICAgIGludCBwcm9iZUNvdW50ID0gMDsKICNl
bmRpZgogCkBAIC01MTEsNyArNTIzLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGludCBp
ID0gaCAmIHNpemVNYXNrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKLSAgICAgICAgKytI
YXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CisgICAgICAgIGF0b21pY0luY3JlbWVudCgmSGFz
aFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzKTsKICAgICAgICAgaW50IHByb2JlQ291bnQgPSAwOwog
I2VuZGlmCiAKQEAgLTU2Myw3ICs1NzUsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaW50
IGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwotICAgICAgICAr
K0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKKyAgICAgICAgYXRvbWljSW5jcmVtZW50KCZI
YXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXMpOwogICAgICAgICBpbnQgcHJvYmVDb3VudCA9IDA7
CiAjZW5kaWYKIApAQCAtNjIzLDcgKzYzNSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBp
bnQgaSA9IGggJiBzaXplTWFzazsKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCi0gICAgICAg
ICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzOworICAgICAgICBhdG9taWNJbmNyZW1lbnQo
Jkhhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3Nlcyk7CiAgICAgICAgIGludCBwcm9iZUNvdW50ID0g
MDsKICNlbmRpZgogCkBAIC03MzgsNyArNzUwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAg
IEFTU0VSVCghbG9va3VwRm9yV3JpdGluZyhFeHRyYWN0b3I6OmV4dHJhY3QoZW50cnkpKS5zZWNv
bmQpOwogICAgICAgICBBU1NFUlQoIWlzRGVsZXRlZEJ1Y2tldCgqKGxvb2t1cEZvcldyaXRpbmco
RXh0cmFjdG9yOjpleHRyYWN0KGVudHJ5KSkuZmlyc3QpKSk7CiAjaWYgRFVNUF9IQVNIVEFCTEVf
U1RBVFMKLSAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtUmVpbnNlcnRzOworICAgICAgICBh
dG9taWNJbmNyZW1lbnQoJkhhc2hUYWJsZVN0YXRzOjpudW1SZWluc2VydHMpOwogI2VuZGlmCiAK
ICAgICAgICAgTW92ZXI8VmFsdWVUeXBlLCBUcmFpdHM6Om5lZWRzRGVzdHJ1Y3Rpb24+Ojptb3Zl
KGVudHJ5LCAqbG9va3VwRm9yV3JpdGluZyhFeHRyYWN0b3I6OmV4dHJhY3QoZW50cnkpKS5maXJz
dCk7CkBAIC04MDEsNyArODEzLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdm9pZCBIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz46OnJlbW92ZShWYWx1ZVR5cGUqIHBvcykKICAgICB7CiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RB
VFMKLSAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtUmVtb3ZlczsKKyAgICAgICAgYXRvbWlj
SW5jcmVtZW50KCZIYXNoVGFibGVTdGF0czo6bnVtUmVtb3Zlcyk7CiAjZW5kaWYKIAogICAgICAg
ICBkZWxldGVCdWNrZXQoKnBvcyk7CkBAIC04ODcsNyArODk5LDcgQEAgbmFtZXNwYWNlIFdURiB7
CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICBpZiAob2xkVGFibGVTaXplICE9
IDApCi0gICAgICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1SZWhhc2hlczsKKyAgICAgICAg
ICAgIGF0b21pY0luY3JlbWVudCgmSGFzaFRhYmxlU3RhdHM6Om51bVJlaGFzaGVzKTsKICNlbmRp
ZgogCiAgICAgICAgIG1fdGFibGVTaXplID0gbmV3VGFibGVTaXplOwpAQCAtMTAxNiw2ICsxMDI4
LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6aW52
YWxpZGF0ZUl0ZXJhdG9ycygpCiAgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0
ZXgpOwogICAgICAgICBjb25zdF9pdGVyYXRvciogbmV4dDsKICAgICAgICAgZm9yIChjb25zdF9p
dGVyYXRvciogcCA9IG1faXRlcmF0b3JzOyBwOyBwID0gbmV4dCkgewogICAgICAgICAgICAgbmV4
dCA9IHAtPm1fbmV4dDsKQEAgLTEwMzcsNiArMTA1MCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICBpZiAoIXRhYmxlKSB7CiAgICAgICAgICAgICBpdC0+bV9uZXh0ID0gMDsKICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2sodGFibGUtPm1fbXV0ZXgpOwog
ICAgICAgICAgICAgQVNTRVJUKHRhYmxlLT5tX2l0ZXJhdG9ycyAhPSBpdCk7CiAgICAgICAgICAg
ICBpdC0+bV9uZXh0ID0gdGFibGUtPm1faXRlcmF0b3JzOwogICAgICAgICAgICAgdGFibGUtPm1f
aXRlcmF0b3JzID0gaXQ7CkBAIC0xMDU4LDYgKzEwNzIsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgICAgIEFTU0VSVCghaXQtPm1fbmV4dCk7CiAgICAgICAgICAgICBBU1NFUlQoIWl0LT5t
X3ByZXZpb3VzKTsKICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2soaXQtPm1fdGFibGUtPm1fbXV0ZXgpOwogICAgICAgICAgICAgaWYgKGl0LT5tX25leHQpIHsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoaXQtPm1fbmV4dC0+bV9wcmV2aW91cyA9PSBpdCk7CiAg
ICAgICAgICAgICAgICAgaXQtPm1fbmV4dC0+bV9wcmV2aW91cyA9IGl0LT5tX3ByZXZpb3VzOwo=
</data>
<flag name="review"
          id="11940"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>