<?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>75859</bug_id>
          
          <creation_ts>2012-01-09 08:21:25 -0800</creation_ts>
          <short_desc>IndexedDB: IDBDatabase destructor is never executed</short_desc>
          <delta_ts>2012-11-20 04:07:11 -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>WebCore Misc.</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>jochen</reporter>
          <assigned_to>jochen</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>dgrogan</cc>
    
    <cc>hans</cc>
    
    <cc>japhet</cc>
    
    <cc>jorlow</cc>
    
    <cc>jsbell</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>532208</commentid>
    <comment_count>0</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-01-09 08:21:25 -0800</bug_when>
    <thetext>The destructor of IDBDatabase is never executed: IDBDatabase always returns true for hasPendingActivity(), so it&apos;s never garbage collected during page lifetime. hasPendingActivity() is only false when the we navigate away from the page, but at this point (at least V8) doesn&apos;t garbage collect the objects anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532216</commentid>
    <comment_count>1</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-01-09 08:42:10 -0800</bug_when>
    <thetext>I don&apos;t understand the comment in hasPendingActivity. If there&apos;s something left that can generate an event with this IDBDatabase in it, shouldn&apos;t that something keep a refptr to the IDBDatabase?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532269</commentid>
    <comment_count>2</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-01-09 10:18:04 -0800</bug_when>
    <thetext>I believe the scenario is one where all IDBDatabase references have been let go by script, but there&apos;s a transaction still running. With the current code the front-end isn&apos;t aware of pending activity since that lives on the back-end. 

We have some refactoring planned that should address that, but should keep the bug open.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532322</commentid>
    <comment_count>3</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-01-09 10:58:15 -0800</bug_when>
    <thetext>but IDBTransaction is a RefPtr to IDBDatabase, shouldn&apos;t that be enough?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532707</commentid>
    <comment_count>4</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-01-09 17:29:09 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; but IDBTransaction is a RefPtr to IDBDatabase, shouldn&apos;t that be enough?

It should be, unless the IDBTransaction has also been de-reference by script and there&apos;s nothing keeping *it* alive. Now that IDBTransaction tracks m_transactionFinished (recent addition) we probably can probably correct this. (Patch welcome!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532900</commentid>
    <comment_count>5</comment_count>
      <attachid>121812</attachid>
    <who name="">jochen</who>
    <bug_when>2012-01-10 02:12:33 -0800</bug_when>
    <thetext>Created attachment 121812
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532904</commentid>
    <comment_count>6</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-01-10 02:14:23 -0800</bug_when>
    <thetext>I tried to write a LayoutTest, however, the object is first deleted when a garbage collection occurs, and there&apos;s no generic way to force a GC.

However, when manually running DRT with --js-flags=--expose-gc() and invoking gc(); I can verify that the object is destroyed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532910</commentid>
    <comment_count>7</comment_count>
      <attachid>121812</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2012-01-10 02:23:20 -0800</bug_when>
    <thetext>Comment on attachment 121812
Patch

It actually looks like this will cause us to lose the fix applied by http://trac.webkit.org/changeset/78280 . I agree this looks like a real problem, but I suspect the solution is to find a smarter condition for hasPendingActivity rather than to remove it entirely. Alternatively, some explanation or justification for why this is the correct solution should be in the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532911</commentid>
    <comment_count>8</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2012-01-10 02:30:44 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; I tried to write a LayoutTest, however, the object is first deleted when a garbage collection occurs, and there&apos;s no generic way to force a GC.

Have you tried GCController.collect() ?

fast/dom/resources/script-element-gc.js is one example of its usage (grep around in LayoutTests for more).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532945</commentid>
    <comment_count>9</comment_count>
      <attachid>121822</attachid>
    <who name="">jochen</who>
    <bug_when>2012-01-10 03:43:45 -0800</bug_when>
    <thetext>Created attachment 121822
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533203</commentid>
    <comment_count>10</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-01-10 11:00:50 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 121812 [details])
&gt; It actually looks like this will cause us to lose the fix applied by http://trac.webkit.org/changeset/78280 . I agree this looks like a real problem, but I suspect the solution is to find a smarter condition for hasPendingActivity rather than to remove it entirely. Alternatively, some explanation or justification for why this is the correct solution should be in the ChangeLog.

Yeah, see also https://bugs.webkit.org/show_bug.cgi?id=54146

We should not destruct if there&apos;s a path to the object e.g. from child objects (which RefPtrs should handle), if there&apos;s pending activity (which should be associated with an IDBTransaction, which has a RefPtr to the IDBDatabase), or if events can fire on the object.

For the latter, a call to EventTarget::hasEventListeners() might be sufficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533216</commentid>
    <comment_count>11</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-01-10 11:13:03 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 121812 [details] [details])
&gt; &gt; It actually looks like this will cause us to lose the fix applied by http://trac.webkit.org/changeset/78280 . I agree this looks like a real problem, but I suspect the solution is to find a smarter condition for hasPendingActivity rather than to remove it entirely. Alternatively, some explanation or justification for why this is the correct solution should be in the ChangeLog.
&gt; 
&gt; Yeah, see also https://bugs.webkit.org/show_bug.cgi?id=54146
&gt; 
&gt; We should not destruct if there&apos;s a path to the object e.g. from child objects (which RefPtrs should handle), if there&apos;s pending activity (which should be associated with an IDBTransaction, which has a RefPtr to the IDBDatabase), or if events can fire on the object.
&gt; 
&gt; For the latter, a call to EventTarget::hasEventListeners() might be sufficient.

IDBDatabase implements refEventTarget/derefEventTarget by ref/deref&apos;ing itself, so that shouldn&apos;t be required</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534451</commentid>
    <comment_count>12</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-01-11 17:34:29 -0800</bug_when>
    <thetext>LGTM

I traced through the &quot;close&quot; logic again to satisfy myself that the IDBDatabase destructor will ensure the callbacks are cleared out not pointing back to the object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535654</commentid>
    <comment_count>13</comment_count>
      <attachid>121822</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-13 06:58:42 -0800</bug_when>
    <thetext>Comment on attachment 121822
Patch

Clearing flags on attachment: 121822

Committed r104933: &lt;http://trac.webkit.org/changeset/104933&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535655</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-13 06:58:46 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771676</commentid>
    <comment_count>15</comment_count>
      <attachid>121822</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-20 02:02:10 -0800</bug_when>
    <thetext>Comment on attachment 121822
Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        connection. Meanwhile, transactions are marked as active DOM objects
&gt; +        during their lifetime, and they keep a RefPtr to the IDBDatabase
&gt; +        object, so this hack is no longer required.

This isn&apos;t sufficient.  If the underlying object is refed by the transactions but there are no JS references to the wrapper, then the wrapper can fall off (be garbage collected and then re-created later).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771678</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-20 02:03:41 -0800</bug_when>
    <thetext>tonyg and/or jochen, can you explain to me what keeps the IDBDatabase&apos;s wrapper alive while there is a pending transaction?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771733</commentid>
    <comment_count>17</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-11-20 04:07:11 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; tonyg and/or jochen, can you explain to me what keeps the IDBDatabase&apos;s wrapper alive while there is a pending transaction?

That&apos;s actually a good question.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121812</attachid>
            <date>2012-01-10 02:12:33 -0800</date>
            <delta_ts>2012-01-10 03:43:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75859-20120110111231.patch</filename>
            <type>text/plain</type>
            <size>2216</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTE3NzVlNTc4NTc0OWYy
NWNiMzljMTU1ZmY3NjE5ZGNhN2I1M2M4Ni4uNGI0ZDUyNDQ3YzQyMWZhN2ZmODgxMzNkYjcyNGVh
ZTVlYzIwMjYwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAxLTEwICBKb2No
ZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIERvbid0IGFydGlm
aWNhbGx5IGtlZXAgSURCRGF0YWJhc2Ugb2JqZWN0cyBhbGl2ZSBpZiB0aGVyZSBhcmUgbm8gcmVm
ZXJlbmNlcyB0byBpdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc1ODU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRh
dGFiYXNlLmg6CisKIDIwMTItMDEtMDkgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDQ1MDcuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCmluZGV4IDE1OTVjNTkyYzdjNjk5MDJl
YTYyMGJlOTVmMzFiMmVjZWQxZGFmOGYuLmU4Y2IzZmNiYjliZGFlNDRhMzA5YzFlM2E4ZGRhODY2
NDNmNTZmZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCkBAIC0yMDMs
MTYgKzIwMyw2IEBAIHZvaWQgSURCRGF0YWJhc2U6Om9uVmVyc2lvbkNoYW5nZShjb25zdCBTdHJp
bmcmIHZlcnNpb24pCiAgICAgZW5xdWV1ZUV2ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3Jl
YXRlKHZlcnNpb24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpKTsKIH0KIAotYm9v
bCBJREJEYXRhYmFzZTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKLXsKLSAgICAvLyBGSVhN
RTogVHJ5IHRvIGZpbmQgc29tZSB3YXkgbm90IHRvIGp1c3QgbGVhayB0aGlzIG9iamVjdCB1bnRp
bCBwYWdlIG5hdmlnYXRpb24uCi0gICAgLy8gRklYTUU6IEluIGFuIGlkZWFsIHdvcmxkLCB3ZSBz
aG91bGQgcmV0dXJuIHRydWUgYXMgbG9uZyBhcyBhbnlvbmUgaGFzIG9yIGNhbgotICAgIC8vICAg
ICAgICBnZXQgYSBoYW5kbGUgdG8gdXMgb3IgYW55IGRlcml2YXRpdmUgdHJhbnNhY3Rpb24vcmVx
dWVzdCBvYmplY3QgYW5kIGFueQotICAgIC8vICAgICAgICBvZiB0aG9zZSBoYXZlIGV2ZW50IGxp
c3RlbmVycy4gVGhpcyBpcyBpbiBvcmRlciB0byBoYW5kbGUgdXNlciBnZW5lcmF0ZWQKLSAgICAv
LyAgICAgICAgZXZlbnRzIHByb3Blcmx5LgotICAgIHJldHVybiAhbV9jb250ZXh0U3RvcHBlZCB8
fCBBY3RpdmVET01PYmplY3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOwotfQotCiB2b2lkIElEQkRh
dGFiYXNlOjpvcGVuKCkKIHsKICAgICBtX2JhY2tlbmQtPm9wZW4obV9kYXRhYmFzZUNhbGxiYWNr
cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmggYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmgKaW5kZXggZjhhZWYyMjU5OWIxYTU2
NGNjODhhNjcwZDJjNjI0NzdhNTU0NTc0Yy4uZmZlMjFkODI2ZTJkMGZhNGM2MDU2YjQ2YzNjMDA5
OTE1M2ZjOWM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFz
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaApAQCAtNzgsNyAr
NzgsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9uVmVyc2lvbkNoYW5nZShjb25zdCBT
dHJpbmcmIHJlcXVlc3RlZFZlcnNpb24pOwogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0Ci0gICAg
dmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZp
cnR1YWwgdm9pZCBzdG9wKCkgT1ZFUlJJREU7CiAKICAgICAvLyBFdmVudFRhcmdldAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121822</attachid>
            <date>2012-01-10 03:43:45 -0800</date>
            <delta_ts>2012-11-20 02:02:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75859-20120110124343.patch</filename>
            <type>text/plain</type>
            <size>6653</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTE3NzVlNTc4NTc0OWYy
NWNiMzljMTU1ZmY3NjE5ZGNhN2I1M2M4Ni4uMDFjMDg4NzAzY2MxZWVhNTJhZDRmMThkMDQ1NjA2
NmEwMTg0YzYwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTAxLTEwICBKb2No
ZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIERvbid0IGFydGlm
aWNhbGx5IGtlZXAgSURCRGF0YWJhc2Ugb2JqZWN0cyBhbGl2ZSBpZiB0aGVyZSBhcmUgbm8gcmVm
ZXJlbmNlcyB0byBpdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc1ODU5CisKKyAgICAgICAgT3JpZ2luYWxseSwgdGhpcyBjb2RlIHdhcyBhZGRlZCB0
byBrZWVwIHRoZSBJREJEYXRhYmFzZSBvYmplY3QgYWxpdmUKKyAgICAgICAgZXZlbiBpZiBubyBy
ZWZlcmVuY2UgZnJvbSBKYXZhU2NyaXB0IHRvIHRoZSBvYmplY3QgZXhpc3RlZCwgYmVjYXVzZQor
ICAgICAgICBydW5uaW5nIHRyYW5zYWN0aW9ucyBjb3VsZCBzdGlsbCBzZW5kIGV2ZW50cyBmb3Ig
dGhpcyBkYXRhYmFzZQorICAgICAgICBjb25uZWN0aW9uLiBNZWFud2hpbGUsIHRyYW5zYWN0aW9u
cyBhcmUgbWFya2VkIGFzIGFjdGl2ZSBET00gb2JqZWN0cworICAgICAgICBkdXJpbmcgdGhlaXIg
bGlmZXRpbWUsIGFuZCB0aGV5IGtlZXAgYSBSZWZQdHIgdG8gdGhlIElEQkRhdGFiYXNlCisgICAg
ICAgIG9iamVjdCwgc28gdGhpcyBoYWNrIGlzIG5vIGxvbmdlciByZXF1aXJlZC4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBzdG9yYWdlL2lu
ZGV4ZWRkYi9kZWxldGUtY2xvc2VkLWRhdGFiYXNlLW9iamVjdC5odG1sCisKKyAgICAgICAgKiBz
dG9yYWdlL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlLmg6
CisKIDIwMTItMDEtMDkgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDQ1MDcuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCmluZGV4IDE1OTVjNTkyYzdjNjk5MDJlYTYyMGJlOTVm
MzFiMmVjZWQxZGFmOGYuLmU4Y2IzZmNiYjliZGFlNDRhMzA5YzFlM2E4ZGRhODY2NDNmNTZmZDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCkBAIC0yMDMsMTYgKzIwMyw2
IEBAIHZvaWQgSURCRGF0YWJhc2U6Om9uVmVyc2lvbkNoYW5nZShjb25zdCBTdHJpbmcmIHZlcnNp
b24pCiAgICAgZW5xdWV1ZUV2ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKHZlcnNp
b24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpKTsKIH0KIAotYm9vbCBJREJEYXRh
YmFzZTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVHJ5IHRv
IGZpbmQgc29tZSB3YXkgbm90IHRvIGp1c3QgbGVhayB0aGlzIG9iamVjdCB1bnRpbCBwYWdlIG5h
dmlnYXRpb24uCi0gICAgLy8gRklYTUU6IEluIGFuIGlkZWFsIHdvcmxkLCB3ZSBzaG91bGQgcmV0
dXJuIHRydWUgYXMgbG9uZyBhcyBhbnlvbmUgaGFzIG9yIGNhbgotICAgIC8vICAgICAgICBnZXQg
YSBoYW5kbGUgdG8gdXMgb3IgYW55IGRlcml2YXRpdmUgdHJhbnNhY3Rpb24vcmVxdWVzdCBvYmpl
Y3QgYW5kIGFueQotICAgIC8vICAgICAgICBvZiB0aG9zZSBoYXZlIGV2ZW50IGxpc3RlbmVycy4g
VGhpcyBpcyBpbiBvcmRlciB0byBoYW5kbGUgdXNlciBnZW5lcmF0ZWQKLSAgICAvLyAgICAgICAg
ZXZlbnRzIHByb3Blcmx5LgotICAgIHJldHVybiAhbV9jb250ZXh0U3RvcHBlZCB8fCBBY3RpdmVE
T01PYmplY3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOwotfQotCiB2b2lkIElEQkRhdGFiYXNlOjpv
cGVuKCkKIHsKICAgICBtX2JhY2tlbmQtPm9wZW4obV9kYXRhYmFzZUNhbGxiYWNrcyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmgKaW5kZXggZjhhZWYyMjU5OWIxYTU2NGNjODhhNjcw
ZDJjNjI0NzdhNTU0NTc0Yy4uZmZlMjFkODI2ZTJkMGZhNGM2MDU2YjQ2YzNjMDA5OTE1M2ZjOWM0
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaApAQCAtNzgsNyArNzgsNiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9uVmVyc2lvbkNoYW5nZShjb25zdCBTdHJpbmcmIHJl
cXVlc3RlZFZlcnNpb24pOwogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0Ci0gICAgdmlydHVhbCBi
b29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9p
ZCBzdG9wKCkgT1ZFUlJJREU7CiAKICAgICAvLyBFdmVudFRhcmdldApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDZmMmQ1OTY4
NDcxZWQ0YzE4YjFmZWQwOTVmNjNmZmUwMmQ3YjhhNjEuLjhjYjFlNGJhNzdiMjE2MDUyMDUwODRi
YzYwMmZhNTU2MDY1NzMzNzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wMS0xMCAgSm9j
aGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXN0IHRoYXQg
YW4gSURCRGF0YWJhc2Ugb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkIG9uY2Ugbm8gZnVydGhl
ciByZWZlcmVuY2VzIHRvIGl0IGV4aXN0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzU4NTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2RlbGV0ZS1jbG9zZWQtZGF0YWJh
c2Utb2JqZWN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvZGVsZXRlLWNsb3NlZC1kYXRhYmFzZS1vYmplY3QuaHRtbDogQWRkZWQuCisKIDIwMTItMDEt
MDkgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9t
aXVtXSBVbnJldmlld2VkIHJlYmFzZWxpbmUsIGZpeGluZyBpbmNvcnJlY3QgcmViYXNlbGluZSBm
cm9tIHIxMDQ0ODkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9k
ZWxldGUtY2xvc2VkLWRhdGFiYXNlLW9iamVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9kZWxldGUtY2xvc2VkLWRhdGFiYXNlLW9iamVjdC1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjBhNGIyODhhMTdlMGQ2OTA2YmNmMGU1ZDZlOGU4M2RmMzgwYjM4ZQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RlbGV0ZS1j
bG9zZWQtZGF0YWJhc2Utb2JqZWN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE4IEBACitFbnN1
cmUgdGhhdCBJREJEYXRhYmFzZSBvYmplY3RzIGFyZSBkZWxldGVkIHdoZW4gdGhlcmUgYXJlIG5v
IHJldGFpbmluZyBwYXRocyBsZWZ0CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitp
bmRleGVkREIgPSB3aW5kb3cuaW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJbmRleGVkREIgfHwg
d2luZG93Lm1vekluZGV4ZWREQjsKK1BBU1MgaW5kZXhlZERCID09IG51bGwgaXMgZmFsc2UKK3dp
bmRvdy5zdGF0ZSA9ICdzdGFydGluZycKK2luZGV4ZWREQi5vcGVuKCdkZWxldGUtY2xvc2VkLWRh
dGFiYXNlLW9iamVjdCcpCitkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK2luZGV4ZWREQi5vcGVu
KCdkZWxldGUtY2xvc2VkLWRhdGFiYXNlLW9iamVjdCcpCitTZWNvbmQgY29ubmVjdGlvbiBzdWNj
ZXNzZnVsbHkgZXN0YWJsaXNoZWQuCitjYWxsaW5nIHNldFZlcnNpb24oKSAtIGNhbGxiYWNrIHNo
b3VsZCBydW4gaW1tZWRpYXRlbHkKK2RiLnNldFZlcnNpb24oJ3ZlcnNpb24gMScpCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZGVsZXRlLWNsb3NlZC1kYXRhYmFzZS1vYmpl
Y3QuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RlbGV0ZS1jbG9zZWQtZGF0
YWJhc2Utb2JqZWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzM3NGQ1NWFjZWY2ZWUzNDBhMjQ1NDJkMjQ3
YTJmYjM4NmM3NTUxMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL2RlbGV0ZS1jbG9zZWQtZGF0YWJhc2Utb2JqZWN0Lmh0bWwKQEAgLTAsMCArMSw2MyBA
QAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorCitkZXNjcmlwdGlvbigiRW5zdXJl
IHRoYXQgSURCRGF0YWJhc2Ugb2JqZWN0cyBhcmUgZGVsZXRlZCB3aGVuIHRoZXJlIGFyZSBubyBy
ZXRhaW5pbmcgcGF0aHMgbGVmdCIpOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKKworZnVuY3Rpb24g
dGVzdCgpIHsKKyAgICBpbmRleGVkREIgPSBldmFsQW5kTG9nKCJpbmRleGVkREIgPSB3aW5kb3cu
aW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJbmRleGVkREIgfHwgd2luZG93Lm1vekluZGV4ZWRE
QjsiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJpbmRleGVkREIgPT0gbnVsbCIpOworICAgIG9wZW5E
QkNvbm5lY3Rpb24oKTsKK30KKworZnVuY3Rpb24gb3BlbkRCQ29ubmVjdGlvbigpCit7CisgICAg
ZXZhbEFuZExvZygid2luZG93LnN0YXRlID0gJ3N0YXJ0aW5nJyIpOworICAgIHJlcXVlc3QgPSBl
dmFsQW5kTG9nKCJpbmRleGVkREIub3BlbignZGVsZXRlLWNsb3NlZC1kYXRhYmFzZS1vYmplY3Qn
KSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gb3BlblN1Y2Nlc3M7CisgICAgcmVxdWVzdC5v
bmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5TdWNj
ZXNzKCkKK3sKKyAgICB3aW5kb3cuZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnRhcmdldC5y
ZXN1bHQiKTsKKworICAgIC8vIE9wZW4gYSBzZWNvbmQgY29ubmVjdGlvbiB0byB0aGUgc2FtZSBk
YXRhYmFzZS4KKyAgICB2YXIgcmVxdWVzdDIgPSBldmFsQW5kTG9nKCJpbmRleGVkREIub3Blbign
ZGVsZXRlLWNsb3NlZC1kYXRhYmFzZS1vYmplY3QnKSIpOworICAgIHJlcXVlc3QyLm9uc3VjY2Vz
cyA9IG9wZW5TdWNjZXNzMjsKKyAgICByZXF1ZXN0Mi5vbmVycm9yID0gdW5leHBlY3RlZEVycm9y
Q2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5TdWNjZXNzMigpCit7CisgICAgZGVidWcoIlNl
Y29uZCBjb25uZWN0aW9uIHN1Y2Nlc3NmdWxseSBlc3RhYmxpc2hlZC4iKTsKKyAgICAvLyBBZnRl
ciBsZWF2aW5nIHRoaXMgZnVuY3Rpb24sIHRoZXJlIGFyZSBubyByZW1haW5pbmcgcmVmZXJlbmNl
cyB0byB0aGUKKyAgICAvLyBzZWNvbmQgY29ubmVjdGlvbiwgc28gaXQgc2hvdWxkIGdldCBkZWxl
dGVkLgorICAgIHNldFRpbWVvdXQoc2V0VmVyc2lvbiwgMik7Cit9CisKK2Z1bmN0aW9uIHNldFZl
cnNpb24oKQoreworICAgIGdjKCk7CisgICAgZGVidWcoImNhbGxpbmcgc2V0VmVyc2lvbigpIC0g
Y2FsbGJhY2sgc2hvdWxkIHJ1biBpbW1lZGlhdGVseSIpOworICAgIHZhciB2ZXJzaW9uQ2hhbmdl
UmVxdWVzdCA9IGV2YWxBbmRMb2coImRiLnNldFZlcnNpb24oJ3ZlcnNpb24gMScpIik7CisgICAg
dmVyc2lvbkNoYW5nZVJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwor
ICAgIHZlcnNpb25DaGFuZ2VSZXF1ZXN0Lm9uYmxvY2tlZCA9IHVuZXhwZWN0ZWRCbG9ja2VkQ2Fs
bGJhY2s7CisgICAgdmVyc2lvbkNoYW5nZVJlcXVlc3Qub25zdWNjZXNzID0gZG9uZTsKK30KKwor
Cit0ZXN0KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>