<?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>26629</bug_id>
          
          <creation_ts>2009-06-22 15:59:37 -0700</creation_ts>
          <short_desc>Refactor localStorage code for use in multi-process browsers (part 2)</short_desc>
          <delta_ts>2009-06-23 13:47:15 -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>
          
          <blocked>25376</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>michaeln</cc>
    
    <cc>playmobil</cc>
    
    <cc>sam</cc>
    
    <cc>yael</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>127484</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-22 15:59:37 -0700</bug_when>
    <thetext>Original bug: https://bugs.webkit.org/show_bug.cgi?id=25376</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127485</commentid>
    <comment_count>1</comment_count>
      <attachid>31688</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-22 16:00:50 -0700</bug_when>
    <thetext>Created attachment 31688
patch v1 (corresponds to patch 2 - v2 in the other thread)

Simplify the interaction between LocalStorageArea/SessionStorageArea and
StorageArea by creating a &quot;blockUntilImportComplete()&quot; function rather than
bouncing back and forth between the child and parent classes in a somewhat
unintuitive manner.

This patch also paves the way for LocalStorageArea and SessionStorageArea being
merged into one.  It&apos;s part of several in a set which are separating syncing
(to disk) code from the rest of the implementation so that local storage and
session storage&apos;s code can be unified.

(Split out from https://bugs.webkit.org/show_bug.cgi?id=25376)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127492</commentid>
    <comment_count>2</comment_count>
      <attachid>31688</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-06-22 16:16:46 -0700</bug_when>
    <thetext>Comment on attachment 31688
patch v1 (corresponds to patch 2 - v2 in the other thread)

In general, a big task like this being split up into multiple patches is a great thing.  It helps follow the progression of the task and more easily digest each step.  I appreciate that you&apos;ve done that.  

Admittedly I haven&apos;t looked ahead to patches 3/4/5 yet but that said...

&gt; +// FIXME: In the future, we should allow use of localStorage while it&apos;s importing (when safe to do so).
&gt; +// Blocking everything until the import is complete is by far the simplest and safest thing to do, but
&gt; +// there is certainly room for safe optimization: Key/length will never be able to make use of such an
&gt; +// optimization (since the order of iteration can change as items are being added). Get can return any
&gt; +// item currently in the map. Get/remove can work whether or not it&apos;s in the map, but we&apos;ll need a list
&gt; +// of items the import should not overwrite. Clear can also work, but it&apos;ll need to kill the import
&gt; +// job first.

What this FIXME isn&apos;t saying is that most of the optimizations it refers to currently exist, but this patch is removing them.  I don&apos;t think it&apos;s okay to have that regression, even temporarily.

This patch seems fine on the surface, except for this regression.  Does 3/4/5 restore the optimization?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127517</commentid>
    <comment_count>3</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-22 17:32:05 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 31688 [review])
&gt; In general, a big task like this being split up into multiple patches is a
&gt; great thing.  It helps follow the progression of the task and more easily
&gt; digest each step.  I appreciate that you&apos;ve done that.  
&gt; 
&gt; Admittedly I haven&apos;t looked ahead to patches 3/4/5 yet but that said...
&gt; 
&gt; &gt; +// FIXME: In the future, we should allow use of localStorage while it&apos;s importing (when safe to do so).
&gt; &gt; +// Blocking everything until the import is complete is by far the simplest and safest thing to do, but
&gt; &gt; +// there is certainly room for safe optimization: Key/length will never be able to make use of such an
&gt; &gt; +// optimization (since the order of iteration can change as items are being added). Get can return any
&gt; &gt; +// item currently in the map. Get/remove can work whether or not it&apos;s in the map, but we&apos;ll need a list
&gt; &gt; +// of items the import should not overwrite. Clear can also work, but it&apos;ll need to kill the import
&gt; &gt; +// job first.
&gt; 
&gt; What this FIXME isn&apos;t saying is that most of the optimizations it refers to
&gt; currently exist, but this patch is removing them.  I don&apos;t think it&apos;s okay to
&gt; have that regression, even temporarily.

I&apos;m not sure I agree.

The locking semantics of length and key don&apos;t change with this patch.  Clear simply does no blocking/locking, which I believe was an oversight.

I believe setItem/removeItem are currently race-y since they only block on the import lock and not on m_importComplete.  Since there&apos;s so much code (like opening the db, reading it in, etc) that runs before taking the lock, it&apos;s quite easy for setItem/removeItem to run before the import.  The import can then overwrite changes.

So that simply leaves getItem.  In the current code, if the key/value has already been loaded when getItem is called, it&apos;ll return the item right away--even if the import isn&apos;t completed.  Unfortunately, this is (correctly) wrapped by a lock.  The import code holds this lock from the time it starts loading items into the map until it finishes.  So as far as I can see, there&apos;s never a case where this &apos;fast path&apos; would help.

So I don&apos;t think this patch is removing any valid optimization and is fixing some issues in the locking semantics.

I guess I should have explained this better in the change description.  Sorry about that.

&gt; This patch seems fine on the surface, except for this regression.  Does 3/4/5
&gt; restore the optimization?

No, but I was planning on doing this _soon_ after basic functionality was working within Chromium.  And I expect that to be true soon after these patches land.  I&apos;m actually pretty excited about doing that kind of work, but I can&apos;t put basic functionality (in Chromium) on hold while doing the fun stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127529</commentid>
    <comment_count>4</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-22 17:56:26 -0700</bug_when>
    <thetext>I&apos;ve created https://bugs.webkit.org/show_bug.cgi?id=26636 to track the need to reliably test race conditions in code like this.

I&apos;m also changing the title of this bug to be more descriptive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127535</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-06-22 18:03:24 -0700</bug_when>
    <thetext>I see now that the expected optimization with set/remove/clear was never actually there.  The code was complicated like this for that very reason.

getItem() was the one I actually already knew there was a flaw with  ;)

My concern stands in a new form - changing the fine grain code to a big heavy block(), it seems to me the fine grained code will just have to be re-introduced at some point to get closer to the original intended optimizations.

Since they aren&apos;t in place, though, I guess the patch is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127537</commentid>
    <comment_count>6</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-22 18:08:14 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I see now that the expected optimization with set/remove/clear was never
&gt; actually there.  The code was complicated like this for that very reason.
&gt; 
&gt; getItem() was the one I actually already knew there was a flaw with  ;)
&gt; 
&gt; My concern stands in a new form - changing the fine grain code to a big heavy
&gt; block(), it seems to me the fine grained code will just have to be
&gt; re-introduced at some point to get closer to the original intended
&gt; optimizations.

I agree.  Originally I tried to leave it in, but the patches were much uglier.  I figured since we weren&apos;t actually losing functionality it was OK, but my guilt is why I put that huge FIXME in.  I&apos;ll create a bug for it now.  :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127651</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-06-23 11:52:48 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/44997</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31688</attachid>
            <date>2009-06-22 16:00:50 -0700</date>
            <delta_ts>2009-06-22 18:03:50 -0700</delta_ts>
            <desc>patch v1 (corresponds to patch 2 - v2 in the other thread)</desc>
            <filename>2.20090622.patch</filename>
            <type>text/plain</type>
            <size>11942</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDk2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMDktMDYtMjIgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U2ltcGxpZnkgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gTG9jYWxTdG9yYWdlQXJlYS9TZXNzaW9u
U3RvcmFnZUFyZWEKKyAgICAgICAgYW5kIFN0b3JhZ2VBcmVhIGJ5IGNyZWF0aW5nIGEgImJsb2Nr
VW50aWxJbXBvcnRDb21wbGV0ZSgpIiBmdW5jdGlvbgorICAgICAgICByYXRoZXIgdGhhbiBib3Vu
Y2luZyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRoZSBjaGlsZCBhbmQgcGFyZW50CisgICAgICAg
IGNsYXNzZXMgaW4gYSBzb21ld2hhdCB1bmludHVpdGl2ZSBtYW5uZXIuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBhbHNvIHBhdmVzIHRoZSB3YXkgZm9yIExvY2FsU3RvcmFnZUFyZWEgYW5kCisgICAg
ICAgIFNlc3Npb25TdG9yYWdlQXJlYSBiZWluZyBtZXJnZWQgaW50byBvbmUuICBJdCdzIHBhcnQg
b2Ygc2V2ZXJhbCBpbiBhCisgICAgICAgIHNldCB3aGljaCBhcmUgc2VwYXJhdGluZyBzeW5jaW5n
ICh0byBkaXNrKSBjb2RlIGZyb20gdGhlIHJlc3Qgb2YgdGhlCisgICAgICAgIGltcGxlbWVudGF0
aW9uIHNvIHRoYXQgbG9jYWwgc3RvcmFnZSBhbmQgc2Vzc2lvbiBzdG9yYWdlJ3MgY29kZSBjYW4g
YmUKKyAgICAgICAgdW5pZmllZC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjUzNzYKKworICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlQXJl
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VBcmVhOjpibG9ja1VudGlsSW1w
b3J0Q29tcGxldGUpOgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5oOgorICAg
ICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZUFyZWE6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6a2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpnZXRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VBcmVhOjpzZXRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpy
ZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpjbGVhcik6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6Y29udGFpbnMpOgorICAgICAgICAqIHN0b3JhZ2Uv
U3RvcmFnZUFyZWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpibG9ja1VudGls
SW1wb3J0Q29tcGxldGUpOgorCiAyMDA5LTA2LTIyICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5jcHAJKHJldmlzaW9uIDQ0OTYwKQorKysgV2ViQ29y
ZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMTIg
KzgyLDYgQEAgdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpzY2hlZHVsZUZpbmFsU3luYwogICAgIG1f
ZmluYWxTeW5jU2NoZWR1bGVkID0gdHJ1ZTsKIH0KIAotdW5zaWduZWQgTG9jYWxTdG9yYWdlQXJl
YTo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAg
aWYgKG1faW1wb3J0Q29tcGxldGUpCi0gICAgICAgIHJldHVybiBpbnRlcm5hbExlbmd0aCgpOwot
Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faW1wb3J0TG9jayk7Ci0gICAgaWYgKG1faW1wb3J0
Q29tcGxldGUpCi0gICAgICAgIHJldHVybiBpbnRlcm5hbExlbmd0aCgpOwotCi0gICAgd2hpbGUg
KCFtX2ltcG9ydENvbXBsZXRlKQotICAgICAgICBtX2ltcG9ydENvbmRpdGlvbi53YWl0KG1faW1w
b3J0TG9jayk7Ci0gICAgQVNTRVJUKG1faW1wb3J0Q29tcGxldGUpOwotICAgIAotICAgIHJldHVy
biBpbnRlcm5hbExlbmd0aCgpOwotfQotCi1TdHJpbmcgTG9jYWxTdG9yYWdlQXJlYTo6a2V5KHVu
c2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG1faW1wb3J0Q29tcGxldGUpCi0gICAgICAgIHJldHVy
biBpbnRlcm5hbEtleShpbmRleCwgZWMpOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faW1w
b3J0TG9jayk7Ci0gICAgaWYgKG1faW1wb3J0Q29tcGxldGUpCi0gICAgICAgIHJldHVybiBpbnRl
cm5hbEtleShpbmRleCwgZWMpOwotCi0gICAgd2hpbGUgKCFtX2ltcG9ydENvbXBsZXRlKQotICAg
ICAgICBtX2ltcG9ydENvbmRpdGlvbi53YWl0KG1faW1wb3J0TG9jayk7Ci0gICAgQVNTRVJUKG1f
aW1wb3J0Q29tcGxldGUpOwotCi0gICAgcmV0dXJuIGludGVybmFsS2V5KGluZGV4LCBlYyk7Ci19
Ci0KLVN0cmluZyBMb2NhbFN0b3JhZ2VBcmVhOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBj
b25zdAotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV9pbXBvcnRD
b21wbGV0ZSkKLSAgICAgICAgcmV0dXJuIGludGVybmFsR2V0SXRlbShrZXkpOwotCi0gICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1faW1wb3J0TG9jayk7Ci0gICAgaWYgKG1faW1wb3J0Q29tcGxldGUp
Ci0gICAgICAgIHJldHVybiBpbnRlcm5hbEdldEl0ZW0oa2V5KTsKLQotICAgIFN0cmluZyBpdGVt
ID0gaW50ZXJuYWxHZXRJdGVtKGtleSk7Ci0gICAgaWYgKCFpdGVtLmlzTnVsbCgpKQotICAgICAg
ICByZXR1cm4gaXRlbTsKLQotICAgIHdoaWxlICghbV9pbXBvcnRDb21wbGV0ZSkKLSAgICAgICAg
bV9pbXBvcnRDb25kaXRpb24ud2FpdChtX2ltcG9ydExvY2spOwotICAgIEFTU0VSVChtX2ltcG9y
dENvbXBsZXRlKTsKLQotICAgIHJldHVybiBpbnRlcm5hbEdldEl0ZW0oa2V5KTsKLX0KLQotdm9p
ZCBMb2NhbFN0b3JhZ2VBcmVhOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZyYW1lKQotewotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV9pbXBvcnRDb21wbGV0ZSkgewotICAgICAg
ICBpbnRlcm5hbFNldEl0ZW0oa2V5LCB2YWx1ZSwgZWMsIGZyYW1lKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2ltcG9ydExvY2spOwotICAgIGlu
dGVybmFsU2V0SXRlbShrZXksIHZhbHVlLCBlYywgZnJhbWUpOwotfQotCi12b2lkIExvY2FsU3Rv
cmFnZUFyZWE6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBmcmFtZSkKLXsg
ICAgCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChtX2ltcG9ydENvbXBs
ZXRlKSB7Ci0gICAgICAgIGludGVybmFsUmVtb3ZlSXRlbShrZXksIGZyYW1lKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2ltcG9ydExvY2spOwot
ICAgIGludGVybmFsUmVtb3ZlSXRlbShrZXksIGZyYW1lKTsKLX0KLQotYm9vbCBMb2NhbFN0b3Jh
Z2VBcmVhOjpjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG1faW1wb3J0Q29tcGxldGUpCi0gICAgICAgIHJl
dHVybiBpbnRlcm5hbENvbnRhaW5zKGtleSk7Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9p
bXBvcnRMb2NrKTsKLSAgICBpZiAobV9pbXBvcnRDb21wbGV0ZSkKLSAgICAgICAgcmV0dXJuIGlu
dGVybmFsQ29udGFpbnMoa2V5KTsKLQotICAgIGJvb2wgY29udGFpbmVkID0gaW50ZXJuYWxDb250
YWlucyhrZXkpOwotICAgIGlmIChjb250YWluZWQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgd2hpbGUgKCFtX2ltcG9ydENvbXBsZXRlKQotICAgICAgICBtX2ltcG9ydENvbmRpdGlvbi53
YWl0KG1faW1wb3J0TG9jayk7Ci0gICAgQVNTRVJUKG1faW1wb3J0Q29tcGxldGUpOwotCi0gICAg
cmV0dXJuIGludGVybmFsQ29udGFpbnMoa2V5KTsKLX0KLQogdm9pZCBMb2NhbFN0b3JhZ2VBcmVh
OjppdGVtQ2hhbmdlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwg
Y29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CkBAIC0zNzYsNiArMjcwLDI3IEBAIHZvaWQgTG9jYWxTdG9yYWdl
QXJlYTo6bWFya0ltcG9ydGVkKCkKICAgICBtX2ltcG9ydENvbmRpdGlvbi5zaWduYWwoKTsKIH0K
IAorLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHdlIHNob3VsZCBhbGxvdyB1c2Ugb2YgbG9jYWxT
dG9yYWdlIHdoaWxlIGl0J3MgaW1wb3J0aW5nICh3aGVuIHNhZmUgdG8gZG8gc28pLgorLy8gQmxv
Y2tpbmcgZXZlcnl0aGluZyB1bnRpbCB0aGUgaW1wb3J0IGlzIGNvbXBsZXRlIGlzIGJ5IGZhciB0
aGUgc2ltcGxlc3QgYW5kIHNhZmVzdCB0aGluZyB0byBkbywgYnV0CisvLyB0aGVyZSBpcyBjZXJ0
YWlubHkgcm9vbSBmb3Igc2FmZSBvcHRpbWl6YXRpb246IEtleS9sZW5ndGggd2lsbCBuZXZlciBi
ZSBhYmxlIHRvIG1ha2UgdXNlIG9mIHN1Y2ggYW4KKy8vIG9wdGltaXphdGlvbiAoc2luY2UgdGhl
IG9yZGVyIG9mIGl0ZXJhdGlvbiBjYW4gY2hhbmdlIGFzIGl0ZW1zIGFyZSBiZWluZyBhZGRlZCku
IEdldCBjYW4gcmV0dXJuIGFueQorLy8gaXRlbSBjdXJyZW50bHkgaW4gdGhlIG1hcC4gR2V0L3Jl
bW92ZSBjYW4gd29yayB3aGV0aGVyIG9yIG5vdCBpdCdzIGluIHRoZSBtYXAsIGJ1dCB3ZSdsbCBu
ZWVkIGEgbGlzdAorLy8gb2YgaXRlbXMgdGhlIGltcG9ydCBzaG91bGQgbm90IG92ZXJ3cml0ZS4g
Q2xlYXIgY2FuIGFsc28gd29yaywgYnV0IGl0J2xsIG5lZWQgdG8ga2lsbCB0aGUgaW1wb3J0Cisv
LyBqb2IgZmlyc3QuCit2b2lkIExvY2FsU3RvcmFnZUFyZWE6OmJsb2NrVW50aWxJbXBvcnRDb21w
bGV0ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIEZh
c3QgcGF0aCB0byBhdm9pZCBsb2NraW5nLgorICAgIGlmIChtX2ltcG9ydENvbXBsZXRlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9pbXBvcnRMb2NrKTsKKyAg
ICB3aGlsZSAoIW1faW1wb3J0Q29tcGxldGUpCisgICAgICAgIG1faW1wb3J0Q29uZGl0aW9uLndh
aXQobV9pbXBvcnRMb2NrKTsKKyAgICBBU1NFUlQobV9pbXBvcnRDb21wbGV0ZSk7Cit9CisKIHZv
aWQgTG9jYWxTdG9yYWdlQXJlYTo6c3luYyhib29sIGNsZWFySXRlbXMsIGNvbnN0IEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+JiBpdGVtcykKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaAkocmV2aXNpb24gNDQ5NjApCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSwx
NCArNzEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAvLyBUaGUgZm9sbG93aW5nIG1l
bWJlcnMgYXJlIHN1YmplY3QgdG8gdGhyZWFkIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuCiAgICAg
cHVibGljOgotICAgICAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkCi0gICAgICAgIHZp
cnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGtl
eSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgICAgICB2aXJ0dWFs
IFN0cmluZyBnZXRJdGVtKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZv
aWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0
aW9uQ29kZSYsIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVJdGVtKGNvbnN0IFN0cmluZyYsIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIHZpcnR1
YWwgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7Ci0KICAgICAgICAgLy8g
Q2FsbGVkIGZyb20gdGhlIGJhY2tncm91bmQgdGhyZWFkCiAgICAgICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtSW1wb3J0KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtU3luYygpOwpAQCAt
OTYsNiArODgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIG11dGFibGUgVGhyZWFk
Q29uZGl0aW9uIG1faW1wb3J0Q29uZGl0aW9uOwogICAgICAgICBtdXRhYmxlIGJvb2wgbV9pbXBv
cnRDb21wbGV0ZTsKICAgICAgICAgdm9pZCBtYXJrSW1wb3J0ZWQoKTsKKyAgICAgICAgdm9pZCBi
bG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5jcHAJKHJldmlzaW9uIDQ0OTYwKQor
KysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQs
MTMgKzU0LDE1IEBAIFN0b3JhZ2VBcmVhOjp+U3RvcmFnZUFyZWEoKQogewogfQogCi11bnNpZ25l
ZCBTdG9yYWdlQXJlYTo6aW50ZXJuYWxMZW5ndGgoKSBjb25zdAordW5zaWduZWQgU3RvcmFnZUFy
ZWE6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+bGVuZ3RoKCk7
CiB9CiAKLVN0cmluZyBTdG9yYWdlQXJlYTo6aW50ZXJuYWxLZXkodW5zaWduZWQgaW5kZXgsIEV4
Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorU3RyaW5nIFN0b3JhZ2VBcmVhOjprZXkodW5zaWduZWQg
aW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogeworICAgIGJsb2NrVW50aWxJbXBvcnRD
b21wbGV0ZSgpOworICAgIAogICAgIFN0cmluZyBrZXk7CiAgICAgCiAgICAgaWYgKCFtX3N0b3Jh
Z2VNYXAtPmtleShpbmRleCwga2V5KSkgewpAQCAtNzEsMTQgKzczLDE3IEBAIFN0cmluZyBTdG9y
YWdlQXJlYTo6aW50ZXJuYWxLZXkodW5zaWduZWQKICAgICByZXR1cm4ga2V5OwogfQogCi1TdHJp
bmcgU3RvcmFnZUFyZWE6OmludGVybmFsR2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QK
K1N0cmluZyBTdG9yYWdlQXJlYTo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKIHsK
KyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICAKICAgICByZXR1cm4gbV9zdG9y
YWdlTWFwLT5nZXRJdGVtKGtleSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWE6OmludGVybmFsU2V0
SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgU3RvcmFnZUFyZWE6OnNldEl0ZW0oY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSog
ZnJhbWUpCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc051bGwoKSk7CisgICAgYmxvY2tVbnRpbElt
cG9ydENvbXBsZXRlKCk7CiAgICAgCiAgICAgaWYgKGZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCkt
PnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkgewogICAgICAgICBlYyA9IFFVT1RBX0VYQ0VFREVE
X0VSUjsKQEAgLTEwMyw4ICsxMDgsMTAgQEAgdm9pZCBTdG9yYWdlQXJlYTo6aW50ZXJuYWxTZXRJ
dGVtKGNvbnN0IAogICAgICAgICBpdGVtQ2hhbmdlZChrZXksIG9sZFZhbHVlLCB2YWx1ZSwgZnJh
bWUpOwogfQogCi12b2lkIFN0b3JhZ2VBcmVhOjppbnRlcm5hbFJlbW92ZUl0ZW0oY29uc3QgU3Ry
aW5nJiBrZXksIEZyYW1lKiBmcmFtZSkKK3ZvaWQgU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0oY29u
c3QgU3RyaW5nJiBrZXksIEZyYW1lKiBmcmFtZSkKIHsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29t
cGxldGUoKTsKKyAgICAKICAgICBpZiAoZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTExOCw4ICsxMjUsMTAg
QEAgdm9pZCBTdG9yYWdlQXJlYTo6aW50ZXJuYWxSZW1vdmVJdGVtKGNvbgogICAgICAgICBpdGVt
UmVtb3ZlZChrZXksIG9sZFZhbHVlLCBmcmFtZSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWE6Omlu
dGVybmFsQ2xlYXIoRnJhbWUqIGZyYW1lKQordm9pZCBTdG9yYWdlQXJlYTo6Y2xlYXIoRnJhbWUq
IGZyYW1lKQogeworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOworICAgIAogICAgIGlm
IChmcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKQEAgLTEyOCw4ICsxMzcsMTAgQEAgdm9pZCBTdG9yYWdlQXJl
YTo6aW50ZXJuYWxDbGVhcihGcmFtZSogZgogICAgIGFyZWFDbGVhcmVkKGZyYW1lKTsKIH0KIAot
Ym9vbCBTdG9yYWdlQXJlYTo6aW50ZXJuYWxDb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29u
c3QKK2Jvb2wgU3RvcmFnZUFyZWE6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAog
eworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOworICAgIAogICAgIHJldHVybiBtX3N0
b3JhZ2VNYXAtPmNvbnRhaW5zKGtleSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlQXJlYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCShy
ZXZpc2lvbiA0NDk2MCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NiwyOCArNDYsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1Ymxp
YzoKICAgICAgICAgdmlydHVhbCB+U3RvcmFnZUFyZWEoKTsKICAgICAgICAgCi0gICAgICAgIHZp
cnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxMZW5ndGgoKTsg
fQotICAgICAgICB2aXJ0dWFsIFN0cmluZyBrZXkodW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEtleShpbmRleCwgZWMpOyB9Ci0gICAgICAg
IHZpcnR1YWwgU3RyaW5nIGdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0IHsgcmV0dXJu
IGludGVybmFsR2V0SXRlbShrZXkpOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRJdGVtKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywg
RnJhbWUqIHNvdXJjZUZyYW1lKSB7IGludGVybmFsU2V0SXRlbShrZXksIHZhbHVlLCBlYywgc291
cmNlRnJhbWUpOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmlu
ZyYga2V5LCBGcmFtZSogc291cmNlRnJhbWUpIHsgaW50ZXJuYWxSZW1vdmVJdGVtKGtleSwgc291
cmNlRnJhbWUpOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhcihGcmFtZSogc291cmNlRnJh
bWUpIHsgaW50ZXJuYWxDbGVhcihzb3VyY2VGcmFtZSk7IH0KLSAgICAgICAgdmlydHVhbCBib29s
IGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdCB7IHJldHVybiBpbnRlcm5hbENvbnRh
aW5zKGtleSk7IH0KLSAgICAgICAgCisgICAgICAgIC8vIFRoZSBIVE1MNSBET00gU3RvcmFnZSBB
UEkKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBrZXko
dW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdDsKKyAgICAgICAgU3RyaW5n
IGdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0OworICAgICAgICB2b2lkIHNldEl0ZW0o
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVj
LCBGcmFtZSogc291cmNlRnJhbWUpOworICAgICAgICB2b2lkIHJlbW92ZUl0ZW0oY29uc3QgU3Ry
aW5nJiBrZXksIEZyYW1lKiBzb3VyY2VGcmFtZSk7CisgICAgICAgIHZvaWQgY2xlYXIoRnJhbWUq
IHNvdXJjZUZyYW1lKTsKKworICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5
KSBjb25zdDsKKwogICAgICAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSB7IHJl
dHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgpOyB9CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
IFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKik7CiAgICAgICAgIFN0b3JhZ2VBcmVhKFNlY3Vy
aXR5T3JpZ2luKiwgU3RvcmFnZUFyZWEqKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgdW5z
aWduZWQgaW50ZXJuYWxMZW5ndGgoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIGludGVybmFsS2V5
KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBp
bnRlcm5hbEdldEl0ZW0oY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgaW50ZXJu
YWxTZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRp
b25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICAgICAgdm9pZCBpbnRlcm5hbFJlbW92
ZUl0ZW0oY29uc3QgU3RyaW5nJiwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICAgICAgdm9pZCBp
bnRlcm5hbENsZWFyKEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIGJvb2wgaW50ZXJuYWxD
b250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7Ci0gICAgICAgIAogICAgICAgICAvLyBU
aGlzIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIGEgYmFja2dyb3VuZCB0aHJlYWQgZm9yIExv
Y2FsU3RvcmFnZUFyZWEncyBiYWNrZ3JvdW5kIHRocmVhZCBpbXBvcnQgcHJvY2VkdXJlLgogICAg
ICAgICB2b2lkIGltcG9ydEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUpOwogCkBAIC03NSw2ICs2OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmly
dHVhbCB2b2lkIGl0ZW1DaGFuZ2VkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9s
ZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpID0gMDsK
ICAgICAgICAgdmlydHVhbCB2b2lkIGl0ZW1SZW1vdmVkKGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIG9sZFZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpID0gMDsKICAgICAgICAgdmly
dHVhbCB2b2lkIGFyZWFDbGVhcmVkKEZyYW1lKiBzb3VyY2VGcmFtZSkgPSAwOworICAgICAgICB2
aXJ0dWFsIHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QgeyB9CiAKICAgICAg
ICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwogICAgICAgICBSZWZQ
dHI8U3RvcmFnZU1hcD4gbV9zdG9yYWdlTWFwOwo=
</data>
<flag name="review"
          id="16293"
          type_id="1"
          status="+"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>