<?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>52904</bug_id>
          
          <creation_ts>2011-01-21 09:38:58 -0800</creation_ts>
          <short_desc>PlatformCAAnimationWin is leaky and inefficient</short_desc>
          <delta_ts>2011-01-21 10:34:40 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>PlatformOnly</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Roben (:aroben)">aroben</reporter>
          <assigned_to name="Adam Roben (:aroben)">aroben</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>darin</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>338108</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-21 09:38:58 -0800</bug_when>
    <thetext>PlatformCAAnimationWin is leaky and inefficient</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338110</commentid>
    <comment_count>1</comment_count>
      <attachid>79752</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-21 09:40:28 -0800</bug_when>
    <thetext>Created attachment 79752
Clean up PlatformCAAnimationWin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338123</commentid>
    <comment_count>2</comment_count>
      <attachid>79752</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-21 10:02:50 -0800</bug_when>
    <thetext>Comment on attachment 79752
Clean up PlatformCAAnimationWin

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

&gt; Source/WebCore/platform/graphics/ca/win/PlatformCAAnimationWin.cpp:125
&gt; -static CACFTimingFunctionRef toCACFTimingFunction(const TimingFunction* timingFunction)
&gt; +static RetainPtr&lt;CACFTimingFunctionRef&gt; toCACFTimingFunction(const TimingFunction* timingFunction)

Do we use the create moniker for things that return RetainPtrs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338128</commentid>
    <comment_count>3</comment_count>
      <attachid>79752</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-21 10:09:06 -0800</bug_when>
    <thetext>Comment on attachment 79752
Clean up PlatformCAAnimationWin

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

&gt;&gt; Source/WebCore/platform/graphics/ca/win/PlatformCAAnimationWin.cpp:125
&gt;&gt; +static RetainPtr&lt;CACFTimingFunctionRef&gt; toCACFTimingFunction(const TimingFunction* timingFunction)
&gt; 
&gt; Do we use the create moniker for things that return RetainPtrs?

I don&apos;t think we do. Since there&apos;s no way to incorrectly handle the lifetime when a RetainPtr is returned, there&apos;s no need to use the &quot;Create&quot; pattern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338148</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-21 10:32:20 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt;&gt; +static RetainPtr&lt;CACFTimingFunctionRef&gt; toCACFTimingFunction(const TimingFunction* timingFunction)
&gt; &gt; 
&gt; &gt; Do we use the create moniker for things that return RetainPtrs?
&gt; 
&gt; I don&apos;t think we do.

I think sometimes we do. I’d have to look to find examples, but I believe they exist.

&gt; Since there&apos;s no way to incorrectly handle the lifetime when a RetainPtr is returned, there&apos;s no need to use the &quot;Create&quot; pattern.

I agree that you don’t need Create/Copy just to avoid basic reference counting mistakes with smart pointers, but I do still think a name that alludes to the fact that it’s a new object and so can be costly for memory might be helpful. So I’d use Create but not Copy in names. And it’s not going to be as precise as the “this gives you a reference you need to balance with release or adopt” rule.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338149</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-21 10:32:32 -0800</bug_when>
    <thetext>Committed r76358: &lt;http://trac.webkit.org/changeset/76358&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338152</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-21 10:34:40 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Since there&apos;s no way to incorrectly handle the lifetime when a RetainPtr is returned, there&apos;s no need to use the &quot;Create&quot; pattern.
&gt; 
&gt; I agree that you don’t need Create/Copy just to avoid basic reference counting mistakes with smart pointers, but I do still think a name that alludes to the fact that it’s a new object and so can be costly for memory might be helpful. So I’d use Create but not Copy in names. And it’s not going to be as precise as the “this gives you a reference you need to balance with release or adopt” rule.

This function sometimes creates a new object and sometimes returns an existing object, but we could probably still come up with an accurate name.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79752</attachid>
            <date>2011-01-21 09:40:28 -0800</date>
            <delta_ts>2011-01-21 10:09:06 -0800</delta_ts>
            <desc>Clean up PlatformCAAnimationWin</desc>
            <filename>bug-52904-20110121124127.patch</filename>
            <type>text/plain</type>
            <size>7780</size>
            <attacher name="Adam Roben (:aroben)">aroben</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNmExNTA0M2FlNzRhNjA3NGRmYTFkNjhiMjFmNGZhOTc1ZGU4OTEwLi41
NThkOWYyMzRmZjk0MmI0NGFjMGNhNmVhZjYwOWEzNTJmZDM4YTRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDUgKzEsMzIgQEAKIDIwMTEtMDEtMjEgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgog
CisgICAgICAgIENsZWFuIHVwIFBsYXRmb3JtQ0FBbmltYXRpb25XaW4KKworICAgICAgICBGaXhl
cyA8aHR0cDovL3dlYmtpdC5vcmcvYi81MjkwND4gUGxhdGZvcm1DQUFuaW1hdGlvbldpbiBpcyBs
ZWFreSBhbmQgaW5lZmZpY2llbnQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0
aW9uV2luLmNwcDoKKyAgICAgICAgKHRvQ0FDRkZpbGxNb2RlVHlwZSk6CisgICAgICAgIChmcm9t
Q0FDRkZpbGxNb2RlVHlwZSk6CisgICAgICAgICh0b0NBQ0ZWYWx1ZUZ1bmN0aW9uVHlwZSk6Cisg
ICAgICAgIChmcm9tQ0FDRlZhbHVlRnVuY3Rpb25UeXBlKToKKyAgICAgICAgQ2hhbmdlZCB0byB0
YWtlIGFuZCByZXR1cm4gQ0ZTdHJpbmdSZWZzLiBUaGVyZSdzIG5vIG5lZWQgdG8gY29udmVydCB0
byBXZWJDb3JlOjpTdHJpbmcganVzdAorICAgICAgICBzbyB3ZSBjYW4gbGF0ZXIgY29udmVydCBi
YWNrIHRvIENGU3RyaW5nUmVmLgorCisgICAgICAgICh0b0NBQ0ZUaW1pbmdGdW5jdGlvbik6IEZp
eGVkIGxlYWtzIGJ5IGNoYW5naW5nIHRoaXMgdG8gcmV0dXJuIGEgUmV0YWluUHRyIGFuZCBhZG9w
dGluZyB0aGUKKyAgICAgICAgcmVzdWx0cyBvZiBDQUNGVGltaW5nRnVuY3Rpb25DcmVhdGUuCisg
ICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uOjpQbGF0Zm9ybUNBQW5pbWF0aW9uKTogQ2hhbmdl
ZCBub3QgdG8gbmVlZGxlc3NseSByb3VuZHRyaXAgdGhyb3VnaAorICAgICAgICBXZWJDb3JlOjpT
dHJpbmcuIEFsc28gY2hhbmdlZCBhbiBBU1NFUlQoMCkgdG8gQVNTRVJUX05PVF9SRUFDSEVEKCku
CisKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb246OnNldEZpbGxNb2RlKToKKyAgICAgICAg
KFBsYXRmb3JtQ0FBbmltYXRpb246OnNldFRpbWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKFBsYXRm
b3JtQ0FBbmltYXRpb246OnNldFZhbHVlRnVuY3Rpb24pOgorICAgICAgICAoUGxhdGZvcm1DQUFu
aW1hdGlvbjo6c2V0VGltaW5nRnVuY3Rpb25zKToKKyAgICAgICAgVXBkYXRlZCBmb3IgY2hhbmdl
cyB0byB0aGUgYWJvdmUgY29udmVyc2lvbiBmdW5jdGlvbnMuCisKKzIwMTEtMDEtMjEgIEFkYW0g
Um9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgorCiAgICAgICAgIFNlcGFyYXRlIGZsdXNoaW5nIGxh
eWVyIGNoYW5nZXMgZnJvbSByZW5kZXJpbmcgaW4gQ0FDRkxheWVyVmlldwogCiAgICAgICAgIE9s
ZCBtb2RlbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAppbmRleCA3MjMwY2Zj
ODQxODExMWEyZDAwNmI5ZmUxMTdlY2RjZTZiMGE3ZDE2Li4yMjhiYjAxMGI0MGY1Yjk1MjdjOWY5
YzI3ZDMwNTdiZTRkYzhkM2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3Bw
CkBAIC00MSw3ICs0MSw3IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1zdGF0aWMg
U3RyaW5nIHRvQ0FDRkZpbGxNb2RlVHlwZShQbGF0Zm9ybUNBQW5pbWF0aW9uOjpGaWxsTW9kZVR5
cGUgdHlwZSkKK3N0YXRpYyBDRlN0cmluZ1JlZiB0b0NBQ0ZGaWxsTW9kZVR5cGUoUGxhdGZvcm1D
QUFuaW1hdGlvbjo6RmlsbE1vZGVUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpOb0ZpbGxNb2RlOgpAQCAtNDksMTAgKzQ5LDEx
IEBAIHN0YXRpYyBTdHJpbmcgdG9DQUNGRmlsbE1vZGVUeXBlKFBsYXRmb3JtQ0FBbmltYXRpb246
OkZpbGxNb2RlVHlwZSB0eXBlKQogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6QmFja3dh
cmRzOiByZXR1cm4ga0NBQ0ZGaWxsTW9kZUJhY2t3YXJkczsKICAgICBjYXNlIFBsYXRmb3JtQ0FB
bmltYXRpb246OkJvdGg6IHJldHVybiBrQ0FDRkZpbGxNb2RlQm90aDsKICAgICB9Ci0gICAgcmV0
dXJuICIiOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwogfQogCi1z
dGF0aWMgUGxhdGZvcm1DQUFuaW1hdGlvbjo6RmlsbE1vZGVUeXBlIGZyb21DQUNGRmlsbE1vZGVU
eXBlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorc3RhdGljIFBsYXRmb3JtQ0FBbmltYXRpb246OkZp
bGxNb2RlVHlwZSBmcm9tQ0FDRkZpbGxNb2RlVHlwZShDRlN0cmluZ1JlZiBzdHJpbmcpCiB7CiAg
ICAgaWYgKHN0cmluZyA9PSBrQ0FDRkZpbGxNb2RlQmFja3dhcmRzKQogICAgICAgICByZXR1cm4g
UGxhdGZvcm1DQUFuaW1hdGlvbjo6QmFja3dhcmRzOwpAQCAtNjMsMTAgKzY0LDEwIEBAIHN0YXRp
YyBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpGaWxsTW9kZVR5cGUgZnJvbUNBQ0ZGaWxsTW9kZVR5cGUo
Y29uc3QgU3RyaW5nJiBzdHJpCiAgICAgcmV0dXJuIFBsYXRmb3JtQ0FBbmltYXRpb246OkZvcndh
cmRzOwogfQogCi1zdGF0aWMgU3RyaW5nIHRvQ0FDRlZhbHVlRnVuY3Rpb25UeXBlKFBsYXRmb3Jt
Q0FBbmltYXRpb246OlZhbHVlRnVuY3Rpb25UeXBlIHR5cGUpCitzdGF0aWMgQ0ZTdHJpbmdSZWYg
dG9DQUNGVmFsdWVGdW5jdGlvblR5cGUoUGxhdGZvcm1DQUFuaW1hdGlvbjo6VmFsdWVGdW5jdGlv
blR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFBsYXRmb3JtQ0FB
bmltYXRpb246Ok5vVmFsdWVGdW5jdGlvbjogcmV0dXJuICIiOworICAgIGNhc2UgUGxhdGZvcm1D
QUFuaW1hdGlvbjo6Tm9WYWx1ZUZ1bmN0aW9uOiByZXR1cm4gMDsKICAgICBjYXNlIFBsYXRmb3Jt
Q0FBbmltYXRpb246OlJvdGF0ZVg6IHJldHVybiBrQ0FDRlZhbHVlRnVuY3Rpb25Sb3RhdGVYOwog
ICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6Um90YXRlWTogcmV0dXJuIGtDQUNGVmFsdWVG
dW5jdGlvblJvdGF0ZVk7CiAgICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpSb3RhdGVaOiBy
ZXR1cm4ga0NBQ0ZWYWx1ZUZ1bmN0aW9uUm90YXRlWjsKQEAgLTc5LDEwICs4MCwxMSBAQCBzdGF0
aWMgU3RyaW5nIHRvQ0FDRlZhbHVlRnVuY3Rpb25UeXBlKFBsYXRmb3JtQ0FBbmltYXRpb246OlZh
bHVlRnVuY3Rpb25UeXBlIHR5cAogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6VHJhbnNs
YXRlWjogcmV0dXJuIGtDQUNGVmFsdWVGdW5jdGlvblRyYW5zbGF0ZVo7CiAgICAgY2FzZSBQbGF0
Zm9ybUNBQW5pbWF0aW9uOjpUcmFuc2xhdGU6IHJldHVybiBrQ0FDRlZhbHVlRnVuY3Rpb25UcmFu
c2xhdGU7CiAgICAgfQotICAgIHJldHVybiAiIjsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIFBsYXRmb3JtQ0FBbmltYXRpb246OlZhbHVlRnVu
Y3Rpb25UeXBlIGZyb21DQUNGVmFsdWVGdW5jdGlvblR5cGUoY29uc3QgU3RyaW5nIHN0cmluZykK
K3N0YXRpYyBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpWYWx1ZUZ1bmN0aW9uVHlwZSBmcm9tQ0FDRlZh
bHVlRnVuY3Rpb25UeXBlKENGU3RyaW5nUmVmIHN0cmluZykKIHsKICAgICBpZiAoc3RyaW5nID09
IGtDQUNGVmFsdWVGdW5jdGlvblJvdGF0ZVgpCiAgICAgICAgIHJldHVybiBQbGF0Zm9ybUNBQW5p
bWF0aW9uOjpSb3RhdGVYOwpAQCAtMTIwLDE0ICsxMjIsMTQgQEAgc3RhdGljIFBsYXRmb3JtQ0FB
bmltYXRpb246OlZhbHVlRnVuY3Rpb25UeXBlIGZyb21DQUNGVmFsdWVGdW5jdGlvblR5cGUoY29u
c3QgU3QKICAgICByZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlvbjo6Tm9WYWx1ZUZ1bmN0aW9uOwog
fQogCi1zdGF0aWMgQ0FDRlRpbWluZ0Z1bmN0aW9uUmVmIHRvQ0FDRlRpbWluZ0Z1bmN0aW9uKGNv
bnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbikKK3N0YXRpYyBSZXRhaW5QdHI8Q0FD
RlRpbWluZ0Z1bmN0aW9uUmVmPiB0b0NBQ0ZUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1pbmdGdW5j
dGlvbiogdGltaW5nRnVuY3Rpb24pCiB7CiAgICAgaWYgKCF0aW1pbmdGdW5jdGlvbikKLSAgICAg
ICAgcmV0dXJuIENBQ0ZUaW1pbmdGdW5jdGlvbkNyZWF0ZSgwLjI1ZiwgMC4xZiwgMC4yNWYsIDAu
MWYpOworICAgICAgICByZXR1cm4gUmV0YWluUHRyPENBQ0ZUaW1pbmdGdW5jdGlvblJlZj4oQWRv
cHRDRiwgQ0FDRlRpbWluZ0Z1bmN0aW9uQ3JlYXRlKDAuMjVmLCAwLjFmLCAwLjI1ZiwgMC4xZikp
OwogICAgICAgICAgICAgCiAgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc0N1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb24oKSkgewogICAgICAgICBjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9u
KiBjdGYgPSBzdGF0aWNfY2FzdDxjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4odGlt
aW5nRnVuY3Rpb24pOwotICAgICAgICByZXR1cm4gQ0FDRlRpbWluZ0Z1bmN0aW9uQ3JlYXRlKHN0
YXRpY19jYXN0PGZsb2F0PihjdGYtPngxKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY3RmLT55MSgp
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGN0Zi0+eDIoKSksIHN0YXRpY19jYXN0PGZsb2F0PihjdGYt
PnkyKCkpKTsKKyAgICAgICAgcmV0dXJuIFJldGFpblB0cjxDQUNGVGltaW5nRnVuY3Rpb25SZWY+
KEFkb3B0Q0YsIENBQ0ZUaW1pbmdGdW5jdGlvbkNyZWF0ZShzdGF0aWNfY2FzdDxmbG9hdD4oY3Rm
LT54MSgpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGN0Zi0+eTEoKSksIHN0YXRpY19jYXN0PGZsb2F0
PihjdGYtPngyKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY3RmLT55MigpKSkpOwogICAgIH0KICAg
ICAKICAgICByZXR1cm4gQ0FDRlRpbWluZ0Z1bmN0aW9uR2V0RnVuY3Rpb25XaXRoTmFtZShrQ0FD
RlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKQEAgLTE2MiwxMiArMTY0LDEyIEBAIFBsYXRmb3JtQ0FB
bmltYXRpb246OlBsYXRmb3JtQ0FBbmltYXRpb24oQW5pbWF0aW9uVHlwZSB0eXBlLCBjb25zdCBT
dHJpbmcmIGtleVBhCiAKIFBsYXRmb3JtQ0FBbmltYXRpb246OlBsYXRmb3JtQ0FBbmltYXRpb24o
UGxhdGZvcm1BbmltYXRpb25SZWYgYW5pbWF0aW9uKQogewotICAgIGlmIChTdHJpbmcoQ0FDRkFu
aW1hdGlvbkdldENsYXNzKGFuaW1hdGlvbikpID09IGtDQUNGQmFzaWNBbmltYXRpb24pCisgICAg
aWYgKENBQ0ZBbmltYXRpb25HZXRDbGFzcyhhbmltYXRpb24pID09IGtDQUNGQmFzaWNBbmltYXRp
b24pCiAgICAgICAgIG1fdHlwZSA9IEJhc2ljOwotICAgIGVsc2UgaWYgKFN0cmluZyhDQUNGQW5p
bWF0aW9uR2V0Q2xhc3MoYW5pbWF0aW9uKSkgPT0ga0NBQ0ZLZXlmcmFtZUFuaW1hdGlvbikKKyAg
ICBlbHNlIGlmIChDQUNGQW5pbWF0aW9uR2V0Q2xhc3MoYW5pbWF0aW9uKSA9PSBrQ0FDRktleWZy
YW1lQW5pbWF0aW9uKQogICAgICAgICBtX3R5cGUgPSBLZXlmcmFtZTsKICAgICBlbHNlIHsKLSAg
ICAgICAgQVNTRVJUKDApOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKQEAgLTI4OSwxMyArMjkxLDEyIEBAIFBsYXRmb3JtQ0FBbmlt
YXRpb246OkZpbGxNb2RlVHlwZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpmaWxsTW9kZSgpIGNvbnN0
CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0RmlsbE1vZGUoRmlsbE1vZGVUeXBlIHZh
bHVlKQogewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4ga2V5UGF0aChBZG9wdENGLCB0b0NB
Q0ZGaWxsTW9kZVR5cGUodmFsdWUpLmNyZWF0ZUNGU3RyaW5nKCkpOwotICAgIENBQ0ZBbmltYXRp
b25TZXRGaWxsTW9kZShtX2FuaW1hdGlvbi5nZXQoKSwga2V5UGF0aC5nZXQoKSk7CisgICAgQ0FD
RkFuaW1hdGlvblNldEZpbGxNb2RlKG1fYW5pbWF0aW9uLmdldCgpLCB0b0NBQ0ZGaWxsTW9kZVR5
cGUodmFsdWUpKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRUaW1pbmdGdW5j
dGlvbihjb25zdCBUaW1pbmdGdW5jdGlvbiogdmFsdWUpCiB7Ci0gICAgQ0FDRkFuaW1hdGlvblNl
dFRpbWluZ0Z1bmN0aW9uKG1fYW5pbWF0aW9uLmdldCgpLCB0b0NBQ0ZUaW1pbmdGdW5jdGlvbih2
YWx1ZSkpOworICAgIENBQ0ZBbmltYXRpb25TZXRUaW1pbmdGdW5jdGlvbihtX2FuaW1hdGlvbi5n
ZXQoKSwgdG9DQUNGVGltaW5nRnVuY3Rpb24odmFsdWUpLmdldCgpKTsKIH0KIAogdm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uOjpjb3B5VGltaW5nRnVuY3Rpb25Gcm9tKGNvbnN0IFBsYXRmb3JtQ0FB
bmltYXRpb24qIHZhbHVlKQpAQCAtMzMwLDggKzMzMSw3IEBAIFBsYXRmb3JtQ0FBbmltYXRpb246
OlZhbHVlRnVuY3Rpb25UeXBlIFBsYXRmb3JtQ0FBbmltYXRpb246OnZhbHVlRnVuY3Rpb24oKSBj
b25zCiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0VmFsdWVGdW5jdGlvbihWYWx1ZUZ1
bmN0aW9uVHlwZSB2YWx1ZSkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGtleVBhdGgo
QWRvcHRDRiwgdG9DQUNGVmFsdWVGdW5jdGlvblR5cGUodmFsdWUpLmNyZWF0ZUNGU3RyaW5nKCkp
OwotICAgIENBQ0ZBbmltYXRpb25TZXRWYWx1ZUZ1bmN0aW9uKG1fYW5pbWF0aW9uLmdldCgpLCBD
QUNGVmFsdWVGdW5jdGlvbkdldEZ1bmN0aW9uV2l0aE5hbWUoa2V5UGF0aC5nZXQoKSkpOworICAg
IENBQ0ZBbmltYXRpb25TZXRWYWx1ZUZ1bmN0aW9uKG1fYW5pbWF0aW9uLmdldCgpLCBDQUNGVmFs
dWVGdW5jdGlvbkdldEZ1bmN0aW9uV2l0aE5hbWUodG9DQUNGVmFsdWVGdW5jdGlvblR5cGUodmFs
dWUpKSk7CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0RnJvbVZhbHVlKGZsb2F0
IHZhbHVlKQpAQCAtNTI0LDcgKzUyNCw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0
VGltaW5nRnVuY3Rpb25zKGNvbnN0IFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+CiAgICAg
UmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBhcnJheShBZG9wdENGLCBDRkFycmF5Q3JlYXRl
TXV0YWJsZSgwLCB2YWx1ZS5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJldGFp
blB0cjxDRk51bWJlclJlZj4gdihBZG9wdENGLCBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJG
bG9hdFR5cGUsICZ2YWx1ZVtpXSkpOwotICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXku
Z2V0KCksIHRvQ0FDRlRpbWluZ0Z1bmN0aW9uKHZhbHVlW2ldKSk7CisgICAgICAgIENGQXJyYXlB
cHBlbmRWYWx1ZShhcnJheS5nZXQoKSwgdG9DQUNGVGltaW5nRnVuY3Rpb24odmFsdWVbaV0pLmdl
dCgpKTsKICAgICB9CiAKICAgICBDQUNGQW5pbWF0aW9uU2V0VGltaW5nRnVuY3Rpb25zKG1fYW5p
bWF0aW9uLmdldCgpLCBhcnJheS5nZXQoKSk7Cg==
</data>
<flag name="review"
          id="71180"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>