<?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>29265</bug_id>
          
          <creation_ts>2009-09-14 19:16:26 -0700</creation_ts>
          <short_desc>DOM Storage needs to be more careful about where &quot;ThreadSafe&quot; objects are destroyed.</short_desc>
          <delta_ts>2009-09-30 11:53:04 -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>New Bugs</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>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>beidson</cc>
    
    <cc>fishd</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>147246</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-14 19:16:26 -0700</bug_when>
    <thetext>DOM Storage needs to be more careful about where &quot;ThreadSafe&quot; objects are destroyed.  With the current code, there actually isn&apos;t a race condition, but it sure would be easy for someone to introduce one.  A bunch of ThreadSafeShared objects have RefPtrs to objects that are NOT ThreadSafeShared objects.  If it were possible any of these objects&apos; destructors to be fired off the main thread, then the you&apos;d have a race condition.  The code should be more clear and self-documenting about how things related to each other.

Since the lifetime of a LocalStorageTask is bounded by the LocalStorageThread which is bounded by the StorageSyncManager, StorageAreaImpl, and StorageAreaSync, there&apos;s no reason for LocalStorageTask to store anything other than pointers.  By breaking this dependency, we can eliminate the risk.

Note that we _could_ have LocalStorageThread&apos;s task queue just store LocalStorageTask*&apos;s rather than RefPtr&lt;LocalStorageTask&gt;s but then we&apos;d need to manually take care of deleting.  It&apos;d probably also be possible to change LocalStorageThread around so that it needn&apos;t hold onto a reference of itself and have a more deterministic shutdown, but my initial attempts to do so failed, and I decided it wasn&apos;t worth changing.  The queue is killed before hand, so the thread is 100% impotent before the main thread continues anyway.

The constructors and destructors of StorageSyncManager, StorageAreaImpl, and StorageAreaSync now have ASSERTs to verify they&apos;re running on the main thread.  I&apos;m fairly positive that it&apos;d be impossible to hit these asserts and the fact that these classes are no longer ThreadSafeShared should make it clear how they&apos;re meant to be used, but I think it&apos;s worth it to be extra sure.  Of course, ideally, we&apos;d have such an assert every time a ref is incremented or decremented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147247</commentid>
    <comment_count>1</comment_count>
      <attachid>39584</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-14 19:20:00 -0700</bug_when>
    <thetext>Created attachment 39584
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149660</commentid>
    <comment_count>2</comment_count>
      <attachid>39584</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-23 22:33:37 -0700</bug_when>
    <thetext>Comment on attachment 39584
Patch v1

I&apos;m not an expert here, but this patch is syntactically correct and I believe that Jeremy understands the lifetimes of the various objects involved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151312</commentid>
    <comment_count>3</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-30 11:53:04 -0700</bug_when>
    <thetext>Committed r48939: &lt;http://trac.webkit.org/changeset/48939&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39584</attachid>
            <date>2009-09-14 19:20:00 -0700</date>
            <delta_ts>2009-09-23 22:33:37 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-29265-20090914191959.patch</filename>
            <type>text/plain</type>
            <size>12347</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODM4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjcgQEAKKzIwMDktMDktMTQgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
RE9NIFN0b3JhZ2UgbmVlZHMgdG8gYmUgbW9yZSBjYXJlZnVsIGFib3V0IHdoZXJlICJUaHJlYWRT
YWZlIiBvYmplY3RzIGFyZSBkZXN0cm95ZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yOTI2NQorCisgICAgICAgIERPTSBTdG9yYWdlIG5lZWRzIHRv
IGJlIG1vcmUgY2FyZWZ1bCBhYm91dCB3aGVyZSAiVGhyZWFkU2FmZSIgb2JqZWN0cyBhcmUKKyAg
ICAgICAgZGVzdHJveWVkLiAgV2l0aCB0aGUgY3VycmVudCBjb2RlLCB0aGVyZSBhY3R1YWxseSBp
c24ndCBhIHJhY2UgY29uZGl0aW9uLCBidXQKKyAgICAgICAgaXQgc3VyZSB3b3VsZCBiZSBlYXN5
IGZvciBzb21lb25lIHRvIGludHJvZHVjZSBvbmUuICBBIGJ1bmNoIG9mCisgICAgICAgIFRocmVh
ZFNhZmVTaGFyZWQgb2JqZWN0cyBoYXZlIFJlZlB0cnMgdG8gb2JqZWN0cyB0aGF0IGFyZSBOT1Qg
VGhyZWFkU2FmZVNoYXJlZAorICAgICAgICBvYmplY3RzLiAgSWYgaXQgd2VyZSBwb3NzaWJsZSBh
bnkgb2YgdGhlc2Ugb2JqZWN0cycgZGVzdHJ1Y3RvcnMgdG8gYmUgZmlyZWQgb2ZmCisgICAgICAg
IHRoZSBtYWluIHRocmVhZCwgdGhlbiB0aGUgeW91J2QgaGF2ZSBhIHJhY2UgY29uZGl0aW9uLiAg
VGhlIGNvZGUgc2hvdWxkIGJlIG1vcmUKKyAgICAgICAgY2xlYXIgYW5kIHNlbGYtZG9jdW1lbnRp
bmcgYWJvdXQgaG93IHRoaW5ncyByZWxhdGVkIHRvIGVhY2ggb3RoZXIuCisKKyAgICAgICAgU2lu
Y2UgdGhlIGxpZmV0aW1lIG9mIGEgTG9jYWxTdG9yYWdlVGFzayBpcyBib3VuZGVkIGJ5IHRoZSBM
b2NhbFN0b3JhZ2VUaHJlYWQKKyAgICAgICAgd2hpY2ggaXMgYm91bmRlZCBieSB0aGUgU3RvcmFn
ZVN5bmNNYW5hZ2VyLCBTdG9yYWdlQXJlYUltcGwsIGFuZAorICAgICAgICBTdG9yYWdlQXJlYVN5
bmMsIHRoZXJlJ3Mgbm8gcmVhc29uIGZvciBMb2NhbFN0b3JhZ2VUYXNrIHRvIHN0b3JlIGFueXRo
aW5nIG90aGVyCisgICAgICAgIHRoYW4gcG9pbnRlcnMuICBCeSBicmVha2luZyB0aGlzIGRlcGVu
ZGVuY3ksIHdlIGNhbiBlbGltaW5hdGUgdGhlIHJpc2suCisKKyAgICAgICAgTm90ZSB0aGF0IHdl
IF9jb3VsZF8gaGF2ZSBMb2NhbFN0b3JhZ2VUaHJlYWQncyB0YXNrIHF1ZXVlIGp1c3Qgc3RvcmUK
KyAgICAgICAgTG9jYWxTdG9yYWdlVGFzayoncyByYXRoZXIgdGhhbiBSZWZQdHI8TG9jYWxTdG9y
YWdlVGFzaz5zIGJ1dCB0aGVuIHdlJ2QgbmVlZCB0bworICAgICAgICBtYW51YWxseSB0YWtlIGNh
cmUgb2YgZGVsZXRpbmcuICBJdCdkIHByb2JhYmx5IGFsc28gYmUgcG9zc2libGUgdG8gY2hhbmdl
CisgICAgICAgIExvY2FsU3RvcmFnZVRocmVhZCBhcm91bmQgc28gdGhhdCBpdCBuZWVkbid0IGhv
bGQgb250byBhIHJlZmVyZW5jZSBvZiBpdHNlbGYKKyAgICAgICAgYW5kIGhhdmUgYSBtb3JlIGRl
dGVybWluaXN0aWMgc2h1dGRvd24sIGJ1dCBteSBpbml0aWFsIGF0dGVtcHRzIHRvIGRvIHNvCisg
ICAgICAgIGZhaWxlZCwgYW5kIEkgZGVjaWRlZCBpdCB3YXNuJ3Qgd29ydGggY2hhbmdpbmcuICBU
aGUgcXVldWUgaXMga2lsbGVkIGJlZm9yZQorICAgICAgICBoYW5kLCBzbyB0aGUgdGhyZWFkIGlz
IDEwMCUgaW1wb3RlbnQgYmVmb3JlIHRoZSBtYWluIHRocmVhZCBjb250aW51ZXMgYW55d2F5Lgor
CisgICAgICAgIFRoZSBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzIG9mIFN0b3JhZ2VTeW5j
TWFuYWdlciwgU3RvcmFnZUFyZWFJbXBsLCBhbmQKKyAgICAgICAgU3RvcmFnZUFyZWFTeW5jIG5v
dyBoYXZlIEFTU0VSVHMgdG8gdmVyaWZ5IHRoZXkncmUgcnVubmluZyBvbiB0aGUgbWFpbiB0aHJl
YWQuIAorICAgICAgICBJJ20gZmFpcmx5IHBvc2l0aXZlIHRoYXQgaXQnZCBiZSBpbXBvc3NpYmxl
IHRvIGhpdCB0aGVzZSBhc3NlcnRzIGFuZCB0aGUgZmFjdAorICAgICAgICB0aGF0IHRoZXNlIGNs
YXNzZXMgYXJlIG5vIGxvbmdlciBUaHJlYWRTYWZlU2hhcmVkIHNob3VsZCBtYWtlIGl0IGNsZWFy
IGhvdworICAgICAgICB0aGV5J3JlIG1lYW50IHRvIGJlIHVzZWQsIGJ1dCBJIHRoaW5rIGl0J3Mg
d29ydGggaXQgdG8gYmUgZXh0cmEgc3VyZS4gIE9mCisgICAgICAgIGNvdXJzZSwgaWRlYWxseSwg
d2UnZCBoYXZlIHN1Y2ggYW4gYXNzZXJ0IGV2ZXJ5IHRpbWUgYSByZWYgaXMgaW5jcmVtZW50ZWQg
b3IKKyAgICAgICAgZGVjcmVtZW50ZWQuCisKKyAgICAgICAgQmVoYXZpb3Igc2hvdWxkIGJlIHVu
Y2hhbmdlZCBhbmQgdGhpcyBpcyBqdXN0IGFuIGludGVybmFsIGNvZGUgY2xlYW51cCwgc28gbm8K
KyAgICAgICAgbmV3IHRlc3RzLgorCisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFnZVRh
c2spOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6cGVyZm9ybVRhc2spOgor
ICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oOgorICAgICAgICAoV2ViQ29yZTo6
TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2Fs
U3RvcmFnZVRhc2s6OmNyZWF0ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdl
VGFzazo6Y3JlYXRlVGVybWluYXRlKToKKyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZVRo
cmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUaHJlYWQ6OnNjaGVkdWxl
SW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVT
eW5jKToKKyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5oOgorICAgICAgICAq
IHN0b3JhZ2UvU3RvcmFnZUFyZWEuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6On5TdG9yYWdlQXJlYUlt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUltcGwp
OgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VBcmVhU3luYzo6U3RvcmFnZUFyZWFTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VBcmVhU3luYzo6flN0b3JhZ2VBcmVhU3luYyk6CisgICAgICAgICogc3RvcmFnZS9T
dG9yYWdlU3luY01hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVN5bmNNYW5h
Z2VyOjpTdG9yYWdlU3luY01hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVN5bmNN
YW5hZ2VyOjp+U3RvcmFnZVN5bmNNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VT
eW5jTWFuYWdlcjo6c2NoZWR1bGVJbXBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVN5
bmNNYW5hZ2VyOjpzY2hlZHVsZVN5bmMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVN5bmNN
YW5hZ2VyLmg6CisKIDIwMDktMDktMTQgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgRml4IHRoZSBjaGFuZ2UgaW4gcjQ4Mzc2IHRvIGRvIGEgbnVsbC1j
aGVjayB0byBmaXggYSBjcmFzaGluZyB0ZXN0LgpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0xvY2Fs
U3RvcmFnZVRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VUYXNrLmNwcAkocmV2aXNpb24gNDgzNTcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9y
YWdlVGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE2ICszMywxOCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUxvY2FsU3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFnZVRhc2soVHlwZSB0
eXBlLCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4gYXJlYSkKK0xvY2FsU3RvcmFnZVRhc2s6
OkxvY2FsU3RvcmFnZVRhc2soVHlwZSB0eXBlLCBTdG9yYWdlQXJlYVN5bmMqIGFyZWEpCiAgICAg
OiBtX3R5cGUodHlwZSkKICAgICAsIG1fYXJlYShhcmVhKQorICAgICwgbV90aHJlYWQoMCkKIHsK
ICAgICBBU1NFUlQobV9hcmVhKTsKICAgICBBU1NFUlQobV90eXBlID09IEFyZWFJbXBvcnQgfHwg
bV90eXBlID09IEFyZWFTeW5jKTsKIH0KIAotTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdl
VGFzayhUeXBlIHR5cGUsIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPiB0aHJlYWQpCitM
b2NhbFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNrKFR5cGUgdHlwZSwgTG9jYWxTdG9yYWdl
VGhyZWFkKiB0aHJlYWQpCiAgICAgOiBtX3R5cGUodHlwZSkKKyAgICAsIG1fYXJlYSgwKQogICAg
ICwgbV90aHJlYWQodGhyZWFkKQogewogICAgIEFTU0VSVChtX3RocmVhZCk7CkBAIC01NywxMSAr
NTksOSBAQCB2b2lkIExvY2FsU3RvcmFnZVRhc2s6OnBlcmZvcm1UYXNrKCkKIHsKICAgICBzd2l0
Y2ggKG1fdHlwZSkgewogICAgICAgICBjYXNlIEFyZWFJbXBvcnQ6Ci0gICAgICAgICAgICBBU1NF
UlQobV9hcmVhKTsKICAgICAgICAgICAgIG1fYXJlYS0+cGVyZm9ybUltcG9ydCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJlYVN5bmM6Ci0gICAgICAgICAgICBBU1NFUlQo
bV9hcmVhKTsKICAgICAgICAgICAgIG1fYXJlYS0+cGVyZm9ybVN5bmMoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFRlcm1pbmF0ZVRocmVhZDoKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xv
Y2FsU3RvcmFnZVRhc2suaAkocmV2aXNpb24gNDgzNTcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9j
YWxTdG9yYWdlVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxOSArNDQsMTkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIH5Mb2NhbFN0b3JhZ2VUYXNrKCk7CiAKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlSW1wb3J0KFBhc3NSZWZQ
dHI8U3RvcmFnZUFyZWFTeW5jPiBhcmVhKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxTdG9y
YWdlVGFzayhBcmVhSW1wb3J0LCBhcmVhKSk7IH0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlU3luYyhQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4g
YXJlYSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZVRhc2soQXJlYVN5bmMsIGFy
ZWEpKTsgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVh
dGVUZXJtaW5hdGUoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+IHRocmVhZCkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZVRhc2soVGVybWluYXRlVGhyZWFkLCB0aHJlYWQp
KTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVJ
bXBvcnQoU3RvcmFnZUFyZWFTeW5jKiBhcmVhKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxT
dG9yYWdlVGFzayhBcmVhSW1wb3J0LCBhcmVhKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlU3luYyhTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKEFyZWFTeW5jLCBhcmVhKSk7IH0K
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlVGVybWlu
YXRlKExvY2FsU3RvcmFnZVRocmVhZCogdGhyZWFkKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTG9j
YWxTdG9yYWdlVGFzayhUZXJtaW5hdGVUaHJlYWQsIHRocmVhZCkpOyB9CiAKICAgICAgICAgdm9p
ZCBwZXJmb3JtVGFzaygpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgTG9jYWxTdG9yYWdlVGFz
ayhUeXBlLCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4pOwotICAgICAgICBMb2NhbFN0b3Jh
Z2VUYXNrKFR5cGUsIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPik7CisgICAgICAgIExv
Y2FsU3RvcmFnZVRhc2soVHlwZSwgU3RvcmFnZUFyZWFTeW5jKik7CisgICAgICAgIExvY2FsU3Rv
cmFnZVRhc2soVHlwZSwgTG9jYWxTdG9yYWdlVGhyZWFkKik7CiAKICAgICAgICAgVHlwZSBtX3R5
cGU7Ci0gICAgICAgIFJlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IG1fYXJlYTsKLSAgICAgICAgUmVm
UHRyPExvY2FsU3RvcmFnZVRocmVhZD4gbV90aHJlYWQ7CisgICAgICAgIFN0b3JhZ2VBcmVhU3lu
YyogbV9hcmVhOworICAgICAgICBMb2NhbFN0b3JhZ2VUaHJlYWQqIG1fdGhyZWFkOwogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0
b3JhZ2VUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VUaHJlYWQuY3BwCShyZXZpc2lvbiA0ODM1NykKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0
b3JhZ2VUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxMyArODYsMTMgQEAgdm9pZCog
TG9jYWxTdG9yYWdlVGhyZWFkOjpsb2NhbFN0b3JhZ2VUaAogICAgIHJldHVybiAwOwogfQogCi12
b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxTdG9yYWdl
QXJlYVN5bmM+IGFyZWEpCit2b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVJbXBvcnQo
U3RvcmFnZUFyZWFTeW5jKiBhcmVhKQogewogICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAm
JiBtX3RocmVhZElEKTsKICAgICBtX3F1ZXVlLmFwcGVuZChMb2NhbFN0b3JhZ2VUYXNrOjpjcmVh
dGVJbXBvcnQoYXJlYSkpOwogfQogCi12b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVT
eW5jKFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBhcmVhKQordm9pZCBMb2NhbFN0b3JhZ2VU
aHJlYWQ6OnNjaGVkdWxlU3luYyhTdG9yYWdlQXJlYVN5bmMqIGFyZWEpCiB7CiAgICAgQVNTRVJU
KCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOwogICAgIG1fcXVldWUuYXBwZW5kKExv
Y2FsU3RvcmFnZVRhc2s6OmNyZWF0ZVN5bmMoYXJlYSkpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdl
L0xvY2FsU3RvcmFnZVRocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VUaHJlYWQuaAkocmV2aXNpb24gNDgzNTcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9j
YWxTdG9yYWdlVGhyZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgc3RhcnQoKTsKIAotICAgICAgICB2b2lkIHNj
aGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPik7Ci0gICAgICAgIHZvaWQg
c2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPik7CisgICAgICAgIHZvaWQg
c2NoZWR1bGVJbXBvcnQoU3RvcmFnZUFyZWFTeW5jKik7CisgICAgICAgIHZvaWQgc2NoZWR1bGVT
eW5jKFN0b3JhZ2VBcmVhU3luYyopOwogCiAgICAgICAgIC8vIENhbGxlZCBmcm9tIHRoZSBtYWlu
IHRocmVhZCB0byBzeW5jaHJvbm91c2x5IHNodXQgZG93biB0aGlzIHRocmVhZAogICAgICAgICB2
b2lkIHRlcm1pbmF0ZSgpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgJKHJldmlzaW9uIDQ4MzU3
KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miw3ICs0Miw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBlbnVtIFN0b3JhZ2VUeXBlIHsgTG9jYWxTdG9yYWdl
LCBTZXNzaW9uU3RvcmFnZSB9OwogCiAgICAgLy8gVGhpcyBpbnRlcmZhY2UgaXMgcmVxdWlyZWQg
Zm9yIENocm9taXVtIHNpbmNlIHRoZXNlIGFjdGlvbnMgbmVlZCB0byBiZSBwcm94aWVkIGJldHdl
ZW4gcHJvY2Vzc2VzLgotICAgIGNsYXNzIFN0b3JhZ2VBcmVhIDogcHVibGljIFRocmVhZFNhZmVT
aGFyZWQ8U3RvcmFnZUFyZWE+IHsKKyAgICBjbGFzcyBTdG9yYWdlQXJlYSA6IHB1YmxpYyBSZWZD
b3VudGVkPFN0b3JhZ2VBcmVhPiB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5TdG9y
YWdlQXJlYSgpIHsgfQogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAkocmV2
aXNpb24gNDgzNTcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFN0b3Jh
Z2VBcmVhSW1wbDo6flN0b3JhZ2VBcmVhSW1wbCgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKIH0KIAogU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUltcGwoU3RvcmFnZVR5cGUg
c3RvcmFnZVR5cGUsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiwgUGFzc1JlZlB0
cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKQpAQCAtNTYsNiArNTcsNyBAQCBTdG9y
YWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlCiAgICAgLCBtX2lzU2h1dGRvd24o
ZmFsc2UpCiAjZW5kaWYKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VS
VChtX3NlY3VyaXR5T3JpZ2luKTsKICAgICBBU1NFUlQobV9zdG9yYWdlTWFwKTsKIApAQCAtODIs
NiArODQsNyBAQCBTdG9yYWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlCiAgICAg
LCBtX2lzU2h1dGRvd24oYXJlYS0+bV9pc1NodXRkb3duKQogI2VuZGlmCiB7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9zZWN1cml0eU9yaWdpbik7CiAgICAgQVNT
RVJUKG1fc3RvcmFnZU1hcCk7CiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwpJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAJKHJldmlzaW9uIDQ4MzU3KQorKysgV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcg
QEAgU3RvcmFnZUFyZWFTeW5jOjpTdG9yYWdlQXJlYVN5bmMoUGFzc1JlZgogICAgICwgbV9zeW5j
U2NoZWR1bGVkKGZhbHNlKQogICAgICwgbV9pbXBvcnRDb21wbGV0ZShmYWxzZSkKIHsKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhKTsKICAgICBB
U1NFUlQobV9zeW5jTWFuYWdlcik7CiAKQEAgLTY4LDYgKzY5LDcgQEAgU3RvcmFnZUFyZWFTeW5j
OjpTdG9yYWdlQXJlYVN5bmMoUGFzc1JlZgogCiBTdG9yYWdlQXJlYVN5bmM6On5TdG9yYWdlQXJl
YVN5bmMoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX3N5
bmNUaW1lci5pc0FjdGl2ZSgpKTsKIH0KIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VT
eW5jTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5j
TWFuYWdlci5jcHAJKHJldmlzaW9uIDQ4MzU3KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VT
eW5jTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgUGFzc1JlZlB0
cjxTdG9yYWdlU3luY01hbmFnZXI+IFN0b3JhZ2VTeQogU3RvcmFnZVN5bmNNYW5hZ2VyOjpTdG9y
YWdlU3luY01hbmFnZXIoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIDogbV9wYXRoKHBhdGguY29w
eSgpKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX3BhdGgu
aXNFbXB0eSgpKTsKICAgICBtX3RocmVhZCA9IExvY2FsU3RvcmFnZVRocmVhZDo6Y3JlYXRlKCk7
CiAgICAgbV90aHJlYWQtPnN0YXJ0KCk7CkBAIC01Nyw2ICs1OCw3IEBAIFN0b3JhZ2VTeW5jTWFu
YWdlcjo6U3RvcmFnZVN5bmNNYW5hZ2VyKGMKIAogU3RvcmFnZVN5bmNNYW5hZ2VyOjp+U3RvcmFn
ZVN5bmNNYW5hZ2VyKCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogfQogCiBTdHJp
bmcgU3RvcmFnZVN5bmNNYW5hZ2VyOjpmdWxsRGF0YWJhc2VGaWxlbmFtZShTZWN1cml0eU9yaWdp
biogb3JpZ2luKQpAQCAtODUsNyArODcsNyBAQCBib29sIFN0b3JhZ2VTeW5jTWFuYWdlcjo6c2No
ZWR1bGVJbXBvcnQoCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAgIGlmIChtX3Ro
cmVhZCkKLSAgICAgICAgbV90aHJlYWQtPnNjaGVkdWxlSW1wb3J0KGFyZWEpOworICAgICAgICBt
X3RocmVhZC0+c2NoZWR1bGVJbXBvcnQoYXJlYS5nZXQoKSk7CiAKICAgICByZXR1cm4gbV90aHJl
YWQ7CiB9CkBAIC05NSw3ICs5Nyw3IEBAIHZvaWQgU3RvcmFnZVN5bmNNYW5hZ2VyOjpzY2hlZHVs
ZVN5bmMoUGEKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgaWYgKG1fdGhyZWFk
KQotICAgICAgICBtX3RocmVhZC0+c2NoZWR1bGVTeW5jKGFyZWEpOworICAgICAgICBtX3RocmVh
ZC0+c2NoZWR1bGVTeW5jKGFyZWEuZ2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCShyZXZpc2lvbiA0ODM1NykK
KysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBTZWN1cml0eU9yaWdpbjsKICAgICBjbGFzcyBTdG9yYWdlQXJlYVN5bmM7CiAKLSAgICBj
bGFzcyBTdG9yYWdlU3luY01hbmFnZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxTdG9yYWdl
U3luY01hbmFnZXI+IHsKKyAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxTdG9yYWdlU3luY01hbmFnZXI+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0
aCk7CiAgICAgICAgIH5TdG9yYWdlU3luY01hbmFnZXIoKTs=
</data>
<flag name="review"
          id="20692"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="20736"
          type_id="3"
          status="-"
          setter="jorlow"
    />
          </attachment>
      

    </bug>

</bugzilla>