<?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>80615</bug_id>
          
          <creation_ts>2012-03-08 11:13:56 -0800</creation_ts>
          <short_desc>CopiedSpace::tryAllocateOversize assumes system page size</short_desc>
          <delta_ts>2012-03-15 16:04:59 -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>JavaScriptCore</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>0</everconfirmed>
          <reporter name="Myles C. Maxfield">litherum</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>573975</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">litherum</who>
    <bug_when>2012-03-08 11:13:56 -0800</bug_when>
    <thetext>Crash in CopiedSpace::tryAllocateOversize:

1. CopiedSpace::tryAllocateOversize is called with a number of bytes, and a pointer to set (See the end of this email for a stack trace).
2. In order to get the block size, this function calls WTF::roundUpToMultipleOf&lt;s_pageSize&gt;(sizeof(CopiedBlock) + bytes); which attempts to round its argument up to a multiple of s_pageSize. This s_pageSize refers to JSC::CopiedSpace::s_pageSize, declared as a static const in JavaScriptCore/heap/CopiedSpace.h as 4 * KB, or 4096.
3. CopiedSpace::tryAllocateOversize then passes this block size to WTF::PageAllocationAligned::allocate, which immediately checks that this parameter, size, is page-aligned via a call to WTF::isPageAligned(size)
4. WTF::isPageAligned queries the system page size with WTF::pageSize(), which returns WTF::s_pageSize, which has been initialized to the system page size with a call to getpagesize(). On our system, this returns 16384.
5. WTF::isPageAligned returns false because the value that is divisible by 4096 is not divisible by 16384.
6. The assert in WTF::PageAllocationAligned::allocate fails.

Eliminating CopiedSpace::s_pageSize in favor of using WTF::s_pageSize would probably be the preferable route.

Stack trace:
std::size_t                     WTF::pageSize()
bool                            WTF::isPageAligned(unsigned int)
void                            WTF::PageAllocationAligned::allocate(unsigned int,unsigned int,WTF::OSAllocator::Usage,bool,bool)
void                            JSC::CopiedSpace::tryAllocateOversize(unsigned int,void**)
void                            JSC::CopiedSpace::tryReallocateOversize(void**,unsigned int,unsigned int)
void                            JSC::CopiedSpace::tryReallocate(void**,unsigned int,unsigned int)
void                            JSC::Heap::tryReallocateStorage(void**,unsigned int,unsigned int)
bool                            JSC::JSArray::increaseVectorLength(JSC::JSGlobalData&amp;,unsigned int)
void                            JSC::JSArray::putByIndexBeyondVectorLength(JSC::ExecState*,unsigned int,JSC::JSValue)
void                            JSC::JSArray::putByIndex(JSC::JSCell*,JSC::ExecState*,unsigned int,JSC::JSValue)
JSC::EncodedJSValue             JSC::arrayProtoFuncPush(JSC::ExecState*)
JSC::JSValue                    JSC::Interpreter::privateExecute(JSC::Interpreter::ExecutionFlag,JSC::RegisterFile*,JSC::ExecState*)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573982</commentid>
    <comment_count>1</comment_count>
    <who name="Myles C. Maxfield">litherum</who>
    <bug_when>2012-03-08 11:15:44 -0800</bug_when>
    <thetext>I&apos;d like to claim this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575073</commentid>
    <comment_count>2</comment_count>
      <attachid>131073</attachid>
    <who name="Myles C. Maxfield">litherum</who>
    <bug_when>2012-03-09 12:21:51 -0800</bug_when>
    <thetext>Created attachment 131073
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576228</commentid>
    <comment_count>3</comment_count>
      <attachid>131073</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-12 10:14:01 -0700</bug_when>
    <thetext>Comment on attachment 131073
Patch

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

I&apos;m not an official reviewer, but I figured I&apos;d give you some suggestions for improvement for when an official reviewer does get around to review this :-)

&gt; Source/JavaScriptCore/wtf/BumpPointerAllocator.h:114
&gt; +        size_t poolSize = std::max(static_cast&lt;size_t&gt;(MINIMUM_BUMP_POOL_SIZE), WTF::pageSize());

What does this change have to do with refactoring CopiedSpace to use WTF::pageSize()?

&gt; Source/JavaScriptCore/wtf/StdLibExtras.h:74
&gt; +#define __ROUND_UP_TO_MULTIPLE_OF__ \

Why not make this a function macro? It&apos;s kind of confusing to assume variables names from the surrounding scope where the macro is invoked and to have a return statement in the macro itself. 

Also, naming things with two initial underscores is generally frowned upon because they&apos;re typically assumed to be reserved by the compiler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576229</commentid>
    <comment_count>4</comment_count>
      <attachid>131073</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-12 10:14:02 -0700</bug_when>
    <thetext>Comment on attachment 131073
Patch

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

I&apos;m not an official reviewer, but I figured I&apos;d give you some suggestions for improvement for when an official reviewer does get around to review this :-)

&gt; Source/JavaScriptCore/wtf/BumpPointerAllocator.h:114
&gt; +        size_t poolSize = std::max(static_cast&lt;size_t&gt;(MINIMUM_BUMP_POOL_SIZE), WTF::pageSize());

What does this change have to do with refactoring CopiedSpace to use WTF::pageSize()?

&gt; Source/JavaScriptCore/wtf/StdLibExtras.h:74
&gt; +#define __ROUND_UP_TO_MULTIPLE_OF__ \

Why not make this a function macro? It&apos;s kind of confusing to assume variables names from the surrounding scope where the macro is invoked and to have a return statement in the macro itself. 

Also, naming things with two initial underscores is generally frowned upon because they&apos;re typically assumed to be reserved by the compiler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576380</commentid>
    <comment_count>5</comment_count>
      <attachid>131073</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-12 12:18:47 -0700</bug_when>
    <thetext>Comment on attachment 131073
Patch

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

r- based on Mark&apos;s comments.

&gt; Source/JavaScriptCore/heap/CopiedSpaceInlineMethods.h:174
&gt; +    size_t pageMask = ~(WTF::pageSize() - 1);

I&apos;d prefer to see a WTF::pageMask() function, rather than one-off code in lots of places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576779</commentid>
    <comment_count>6</comment_count>
      <attachid>131466</attachid>
    <who name="Myles C. Maxfield">litherum</who>
    <bug_when>2012-03-12 17:27:24 -0700</bug_when>
    <thetext>Created attachment 131466
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576790</commentid>
    <comment_count>7</comment_count>
      <attachid>131466</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-12 17:35:02 -0700</bug_when>
    <thetext>Comment on attachment 131466
Patch

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

&gt; Source/JavaScriptCore/heap/CopiedSpaceInlineMethods.h:174
&gt; +    return reinterpret_cast&lt;CopiedBlock*&gt;(reinterpret_cast&lt;size_t&gt;(ptr) &amp; WTF::pageMask());

This function is hot, so I&apos;d prefer not to turn a constant into two out-of-line function calls.

I&apos;d suggest making WTF::pageSize() and WTF::pageMask() inline function calls that read globals inside WTF. You can initialize these globals inside WTF::initializeThreading().

&gt; Source/JavaScriptCore/wtf/StdLibExtras.h:76
&gt; +#define ROUND_UP_TO_MULTIPLE_OF(divisor, x) \
&gt; +    size_t remainderMask = divisor - 1; \
&gt; +    return (x + remainderMask) &amp; ~remainderMask;

I&apos;d prefer to see this as an inline function. In fact, you&apos;ve already written that inline function. So now, all you need is to make you function template call your other function.

&gt; Source/JavaScriptCore/wtf/StdLibExtras.h:166
&gt; +inline size_t roundUpToMultipleOf(size_t divisor, size_t x)

This function should ASSERT that &quot;divisor&quot; is a power of two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576794</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-12 17:37:19 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 131466 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131466&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/CopiedSpaceInlineMethods.h:174
&gt; &gt; +    return reinterpret_cast&lt;CopiedBlock*&gt;(reinterpret_cast&lt;size_t&gt;(ptr) &amp; WTF::pageMask());
&gt; 
&gt; This function is hot, so I&apos;d prefer not to turn a constant into two out-of-line function calls.
&gt; 
&gt; I&apos;d suggest making WTF::pageSize() and WTF::pageMask() inline function calls that read globals inside WTF. You can initialize these globals inside WTF::initializeThreading().
&gt; 

This is yucky since pageSize() is not known at compile-time.

I think we should be using our own fake notion of page size (64KB?) whenever possible and just asserting at run-time that it is both larger than pageSize() and is a (power-of-two) multiple of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576820</commentid>
    <comment_count>9</comment_count>
      <attachid>131466</attachid>
    <who name="Myles C. Maxfield">litherum</who>
    <bug_when>2012-03-12 17:55:39 -0700</bug_when>
    <thetext>Comment on attachment 131466
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/heap/CopiedSpaceInlineMethods.h:174
&gt;&gt;&gt; +    return reinterpret_cast&lt;CopiedBlock*&gt;(reinterpret_cast&lt;size_t&gt;(ptr) &amp; WTF::pageMask());
&gt;&gt; 
&gt;&gt; This function is hot, so I&apos;d prefer not to turn a constant into two out-of-line function calls.
&gt;&gt; 
&gt;&gt; I&apos;d suggest making WTF::pageSize() and WTF::pageMask() inline function calls that read globals inside WTF. You can initialize these globals inside WTF::initializeThreading().
&gt; 
&gt; This is yucky since pageSize() is not known at compile-time.
&gt; 
&gt; I think we should be using our own fake notion of page size (64KB?) whenever possible and just asserting at run-time that it is both larger than pageSize() and is a (power-of-two) multiple of it.

pageSize() already reads a constant which gets set once: if (!s_pageSize) s_pageSize = systemPageSize(); ... return s_pageSize;

Should I continue this strategy and add another size_t to PageBlock.cpp? Or should I initialize the value in initializeThreading() like you said? Moving it to initializeThreading would make pageSize() slightly faster, as it wouldn&apos;t have to check to see if the constant is already initialized. Or, should I use a constant page size like Filip Pizlo said? I think using a constant page size doesn&apos;t make as much sense as using the system page size, initializing it once, and caching it.

I&apos;m happy to do whatever you guys decide on; I&apos;m just getting mixed messages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576827</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-12 18:00:45 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 131466 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131466&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/JavaScriptCore/heap/CopiedSpaceInlineMethods.h:174
&gt; &gt;&gt;&gt; +    return reinterpret_cast&lt;CopiedBlock*&gt;(reinterpret_cast&lt;size_t&gt;(ptr) &amp; WTF::pageMask());
&gt; &gt;&gt; 
&gt; &gt;&gt; This function is hot, so I&apos;d prefer not to turn a constant into two out-of-line function calls.
&gt; &gt;&gt; 
&gt; &gt;&gt; I&apos;d suggest making WTF::pageSize() and WTF::pageMask() inline function calls that read globals inside WTF. You can initialize these globals inside WTF::initializeThreading().
&gt; &gt; 
&gt; &gt; This is yucky since pageSize() is not known at compile-time.
&gt; &gt; 
&gt; &gt; I think we should be using our own fake notion of page size (64KB?) whenever possible and just asserting at run-time that it is both larger than pageSize() and is a (power-of-two) multiple of it.
&gt; 
&gt; pageSize() already reads a constant which gets set once: if (!s_pageSize) s_pageSize = systemPageSize(); ... return s_pageSize;
&gt; 
&gt; Should I continue this strategy and add another size_t to PageBlock.cpp? Or should I initialize the value in initializeThreading() like you said? Moving it to initializeThreading would make pageSize() slightly faster, as it wouldn&apos;t have to check to see if the constant is already initialized. Or, should I use a constant page size like Filip Pizlo said? I think using a constant page size doesn&apos;t make as much sense as using the system page size, initializing it once, and caching it.

Apologies, I hadn&apos;t read your patch closely enough.  This is actually not a hot path - it&apos;s the slow case when doing oversize allocation.

I think your use of pageSize(), even without making Geoff&apos;s suggested changes, is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576829</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-12 18:02:09 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 131466 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131466&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/CopiedSpaceInlineMethods.h:174
&gt; &gt; +    return reinterpret_cast&lt;CopiedBlock*&gt;(reinterpret_cast&lt;size_t&gt;(ptr) &amp; WTF::pageMask());
&gt; 
&gt; This function is hot, so I&apos;d prefer not to turn a constant into two out-of-line function calls.
&gt; 
&gt; I&apos;d suggest making WTF::pageSize() and WTF::pageMask() inline function calls that read globals inside WTF. You can initialize these globals inside WTF::initializeThreading().

This function should not be hot and even if it was, we&apos;d have already lost.  So I think it should be fine to use WTF::pageSize() and WTF::pageMask() without making them inline.  That simplifies this patch, and has the nice property that we&apos;re not unnecessarily making things inline even though we&apos;re not using them in hot paths.

Geoff, do you agree?

&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/StdLibExtras.h:76
&gt; &gt; +#define ROUND_UP_TO_MULTIPLE_OF(divisor, x) \
&gt; &gt; +    size_t remainderMask = divisor - 1; \
&gt; &gt; +    return (x + remainderMask) &amp; ~remainderMask;
&gt; 
&gt; I&apos;d prefer to see this as an inline function. In fact, you&apos;ve already written that inline function. So now, all you need is to make you function template call your other function.
&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/StdLibExtras.h:166
&gt; &gt; +inline size_t roundUpToMultipleOf(size_t divisor, size_t x)
&gt; 
&gt; This function should ASSERT that &quot;divisor&quot; is a power of two.

I concur with Geoff&apos;s other two comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576886</commentid>
    <comment_count>12</comment_count>
      <attachid>131466</attachid>
    <who name="Myles C. Maxfield">litherum</who>
    <bug_when>2012-03-12 18:49:02 -0700</bug_when>
    <thetext>Comment on attachment 131466
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/heap/CopiedSpaceInlineMethods.h:174
&gt;&gt;&gt;&gt;&gt;&gt; +    return reinterpret_cast&lt;CopiedBlock*&gt;(reinterpret_cast&lt;size_t&gt;(ptr) &amp; WTF::pageMask());
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; This function is hot, so I&apos;d prefer not to turn a constant into two out-of-line function calls.
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; I&apos;d suggest making WTF::pageSize() and WTF::pageMask() inline function calls that read globals inside WTF. You can initialize these globals inside WTF::initializeThreading().
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; This is yucky since pageSize() is not known at compile-time.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I think we should be using our own fake notion of page size (64KB?) whenever possible and just asserting at run-time that it is both larger than pageSize() and is a (power-of-two) multiple of it.
&gt;&gt;&gt; 
&gt;&gt;&gt; pageSize() already reads a constant which gets set once: if (!s_pageSize) s_pageSize = systemPageSize(); ... return s_pageSize;
&gt;&gt;&gt; 
&gt;&gt;&gt; Should I continue this strategy and add another size_t to PageBlock.cpp? Or should I initialize the value in initializeThreading() like you said? Moving it to initializeThreading would make pageSize() slightly faster, as it wouldn&apos;t have to check to see if the constant is already initialized. Or, should I use a constant page size like Filip Pizlo said? I think using a constant page size doesn&apos;t make as much sense as using the system page size, initializing it once, and caching it.
&gt;&gt;&gt; 
&gt;&gt;&gt; I&apos;m happy to do whatever you guys decide on; I&apos;m just getting mixed messages.
&gt;&gt; 
&gt;&gt; Apologies, I hadn&apos;t read your patch closely enough.  This is actually not a hot path - it&apos;s the slow case when doing oversize allocation.
&gt;&gt; 
&gt;&gt; I think your use of pageSize(), even without making Geoff&apos;s suggested changes, is fine.
&gt; 
&gt; This function should not be hot and even if it was, we&apos;d have already lost.  So I think it should be fine to use WTF::pageSize() and WTF::pageMask() without making them inline.  That simplifies this patch, and has the nice property that we&apos;re not unnecessarily making things inline even though we&apos;re not using them in hot paths.
&gt; 
&gt; Geoff, do you agree?

While inlining pageMask() and pageSize(), I&apos;m coming across some pain-points:

- initializeThreading will be doing something that is completely unrelated to threading
- initializeThreading is system-specific, but all the systems need to set WTF::s_pageSize and WTF::s_pageMask. Doing this properly (having a generic initializeThreading routine that calls the system-specific one) seems like a very major change for this CL
- inlining pageSize and pageMask means I have to move their definitions to the header (PageBlock.h). Because I&apos;d be moving systemPageSize out of PageBlock.cpp (to live next to initializeThreading), PageBlock.cpp won&apos;t have any functions defined in it. I&apos;d then be deleting PageBlock.cpp because it would be empty.

Does this sounds reasonable? I wanted to know if I should proceed before changing how initializeThreading is called and deleting an entire file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576930</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-12 19:37:08 -0700</bug_when>
    <thetext>As I mentioned in my previous two comments, inlining WTF::pageSize is unnecessary and probably unwise. 

(In reply to comment #12)
&gt; (From update of attachment 131466 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131466&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/heap/CopiedSpaceInlineMethods.h:174
&gt; &gt;&gt;&gt;&gt;&gt;&gt; +    return reinterpret_cast&lt;CopiedBlock*&gt;(reinterpret_cast&lt;size_t&gt;(ptr) &amp; WTF::pageMask());
&gt; &gt;&gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt;&gt; This function is hot, so I&apos;d prefer not to turn a constant into two out-of-line function calls.
&gt; &gt;&gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt;&gt; I&apos;d suggest making WTF::pageSize() and WTF::pageMask() inline function calls that read globals inside WTF. You can initialize these globals inside WTF::initializeThreading().
&gt; &gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt; This is yucky since pageSize() is not known at compile-time.
&gt; &gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt; I think we should be using our own fake notion of page size (64KB?) whenever possible and just asserting at run-time that it is both larger than pageSize() and is a (power-of-two) multiple of it.
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; pageSize() already reads a constant which gets set once: if (!s_pageSize) s_pageSize = systemPageSize(); ... return s_pageSize;
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Should I continue this strategy and add another size_t to PageBlock.cpp? Or should I initialize the value in initializeThreading() like you said? Moving it to initializeThreading would make pageSize() slightly faster, as it wouldn&apos;t have to check to see if the constant is already initialized. Or, should I use a constant page size like Filip Pizlo said? I think using a constant page size doesn&apos;t make as much sense as using the system page size, initializing it once, and caching it.
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; I&apos;m happy to do whatever you guys decide on; I&apos;m just getting mixed messages.
&gt; &gt;&gt; 
&gt; &gt;&gt; Apologies, I hadn&apos;t read your patch closely enough.  This is actually not a hot path - it&apos;s the slow case when doing oversize allocation.
&gt; &gt;&gt; 
&gt; &gt;&gt; I think your use of pageSize(), even without making Geoff&apos;s suggested changes, is fine.
&gt; &gt; 
&gt; &gt; This function should not be hot and even if it was, we&apos;d have already lost.  So I think it should be fine to use WTF::pageSize() and WTF::pageMask() without making them inline.  That simplifies this patch, and has the nice property that we&apos;re not unnecessarily making things inline even though we&apos;re not using them in hot paths.
&gt; &gt; 
&gt; &gt; Geoff, do you agree?
&gt; 
&gt; While inlining pageMask() and pageSize(), I&apos;m coming across some pain-points:
&gt; 
&gt; - initializeThreading will be doing something that is completely unrelated to threading
&gt; - initializeThreading is system-specific, but all the systems need to set WTF::s_pageSize and WTF::s_pageMask. Doing this properly (having a generic initializeThreading routine that calls the system-specific one) seems like a very major change for this CL
&gt; - inlining pageSize and pageMask means I have to move their definitions to the header (PageBlock.h). Because I&apos;d be moving systemPageSize out of PageBlock.cpp (to live next to initializeThreading), PageBlock.cpp won&apos;t have any functions defined in it. I&apos;d then be deleting PageBlock.cpp because it would be empty.
&gt; 
&gt; Does this sounds reasonable? I wanted to know if I should proceed before changing how initializeThreading is called and deleting an entire file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577539</commentid>
    <comment_count>14</comment_count>
      <attachid>131667</attachid>
    <who name="Myles C. Maxfield">litherum</who>
    <bug_when>2012-03-13 10:54:33 -0700</bug_when>
    <thetext>Created attachment 131667
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579743</commentid>
    <comment_count>15</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-15 14:30:30 -0700</bug_when>
    <thetext>&gt; This function should not be hot and even if it was, we&apos;d have already lost.

Agreed -- as of now. As such, I&apos;ll say &quot;r+&quot;.

If we aim to use these functions throughout the system, in place of constants, we&apos;ll eventually run into some hot code paths, and we&apos;ll need to revisit the inlining question. I&apos;m not convinced that there&apos;s any fundamental barrier to inlining here, but I am convinced that we can cross that bridge when we come to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579744</commentid>
    <comment_count>16</comment_count>
      <attachid>131667</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-15 14:30:41 -0700</bug_when>
    <thetext>Comment on attachment 131667
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579844</commentid>
    <comment_count>17</comment_count>
      <attachid>131667</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-15 16:04:54 -0700</bug_when>
    <thetext>Comment on attachment 131667
Patch

Clearing flags on attachment: 131667

Committed r110902: &lt;http://trac.webkit.org/changeset/110902&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579845</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-15 16:04:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131073</attachid>
            <date>2012-03-09 12:21:51 -0800</date>
            <delta_ts>2012-03-12 17:27:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80615-20120309122212.patch</filename>
            <type>text/plain</type>
            <size>5237</size>
            <attacher name="Myles C. Maxfield">litherum</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEwMzE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDEyLTAzLTA5ICBNeWxlcyBNYXhmaWVsZCAgPG1tYXhmaWVsZEBnb29nbGUuY29tPgorCisg
ICAgICAgIENvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZU92ZXJzaXplIGFzc3VtZXMgc3lzdGVtIHBh
Z2Ugc2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODA2MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGhlYXAvQ29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6dHJ5QWxs
b2NhdGVPdmVyc2l6ZSk6CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZS5oOgorICAgICAgICAo
Q29waWVkU3BhY2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmg6
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpvdmVyc2l6ZUJsb2NrRm9yKToKKyAgICAgICAg
KiB3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaDoKKyAgICAgICAgKFdURjo6QnVtcFBvaW50ZXJQ
b29sOjpjcmVhdGUpOgorICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoKKyAgICAgICAgKFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZik6CisKIDIwMTItMDMtMDkgIEpvbiBMZWUgIDxqb25sZWVA
YXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBFTkFCTEUoTEVHQUNZX05PVElG
SUNBVElPTlMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2Uu
Y3BwCShyZXZpc2lvbiAxMTAxOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3Bp
ZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDggKzcxLDggQEAgQ2hlY2tlZEJvb2xl
YW4gQ29waWVkU3BhY2U6OnRyeUFsbG9jYXRlTwogewogICAgIEFTU0VSVChpc092ZXJzaXplKGJ5
dGVzKSk7CiAgICAgCi0gICAgc2l6ZV90IGJsb2NrU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZjxzX3BhZ2VTaXplPihzaXplb2YoQ29waWVkQmxvY2spICsgYnl0ZXMpOwotICAgIFBhZ2VB
bGxvY2F0aW9uQWxpZ25lZCBhbGxvY2F0aW9uID0gUGFnZUFsbG9jYXRpb25BbGlnbmVkOjphbGxv
Y2F0ZShibG9ja1NpemUsIHNfcGFnZVNpemUsIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2VzKTsK
KyAgICBzaXplX3QgYmxvY2tTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKFdURjo6cGFn
ZVNpemUoKSwgc2l6ZW9mKENvcGllZEJsb2NrKSArIGJ5dGVzKTsKKyAgICBQYWdlQWxsb2NhdGlv
bkFsaWduZWQgYWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoYmxv
Y2tTaXplLCBXVEY6OnBhZ2VTaXplKCksIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2VzKTsKICAg
ICBpZiAoIXN0YXRpY19jYXN0PGJvb2w+KGFsbG9jYXRpb24pKSB7CiAgICAgICAgICpvdXRQdHIg
PSAwOwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDExMDE5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9PU0FsbG9jYXRvci5oPgog
I2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbkFsaWduZWQuaD4KKyNpbmNsdWRlIDx3dGYvUGFn
ZUJsb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmdQcmltaXRpdmVzLmg+CiAKQEAgLTExNiw4ICsxMTcsNiBAQCBwcml2YXRlOgogICAg
IHNpemVfdCBtX251bWJlck9mTG9hbmVkQmxvY2tzOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBzX21heEFsbG9jYXRpb25TaXplID0gMzIgKiBLQjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IHNfcGFnZVNpemUgPSA0ICogS0I7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX3BhZ2VNYXNr
ID0gfihzX3BhZ2VTaXplIC0gMSk7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2luaXRpYWxC
bG9ja051bSA9IDE2OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc19ibG9ja01hc2sgPSB+KEhl
YXBCbG9jazo6c19ibG9ja1NpemUgLSAxKTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24g
MTEwMTk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVN
ZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw3ICsxNzEsOCBAQCBpbmxpbmUgYm9vbCBD
b3BpZWRTcGFjZTo6aXNQaW5uZWQodm9pZCogCiAKIGlubGluZSBDb3BpZWRCbG9jayogQ29waWVk
U3BhY2U6Om92ZXJzaXplQmxvY2tGb3Iodm9pZCogcHRyKQogewotICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PENvcGllZEJsb2NrKj4ocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KHB0cikgJiBz
X3BhZ2VNYXNrKTsKKyAgICBzaXplX3QgcGFnZU1hc2sgPSB+KFdURjo6cGFnZVNpemUoKSAtIDEp
OworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvcGllZEJsb2NrKj4ocmVpbnRlcnByZXRf
Y2FzdDxzaXplX3Q+KHB0cikgJiBwYWdlTWFzayk7CiB9CiAKIGlubGluZSBDb3BpZWRCbG9jayog
Q29waWVkU3BhY2U6OmJsb2NrRm9yKHZvaWQqIHB0cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmgJKHJldmlzaW9uIDExMDE5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBCdW1wUG9pbnRlckFsbG9jYXRv
cl9oCiAjZGVmaW5lIEJ1bXBQb2ludGVyQWxsb2NhdG9yX2gKIAorI2luY2x1ZGUgPGFsZ29yaXRo
bT4KICNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb24uaD4KIAogbmFtZXNwYWNlIFdURiB7CkBA
IC0xMTAsNyArMTExLDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKG1pbmltdW1DYXBhY2l0eSA8
IHNpemVvZihCdW1wUG9pbnRlclBvb2wpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAg
ICAgc2l6ZV90IHBvb2xTaXplID0gTUlOSU1VTV9CVU1QX1BPT0xfU0laRTsKKyAgICAgICAgc2l6
ZV90IHBvb2xTaXplID0gc3RkOjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PihNSU5JTVVNX0JVTVBf
UE9PTF9TSVpFKSwgV1RGOjpwYWdlU2l6ZSgpKTsKICAgICAgICAgd2hpbGUgKHBvb2xTaXplIDwg
bWluaW11bUNhcGFjaXR5KSB7CiAgICAgICAgICAgICBwb29sU2l6ZSA8PD0gMTsKICAgICAgICAg
ICAgIC8vIFRoZSBmb2xsb3dpbmcgaWYgY2hlY2sgcmVsaWVzIG9uIE1JTklNVU1fQlVNUF9QT09M
X1NJWkUgYmVpbmcgYSBwb3dlciBvZiAyIQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAxMTAxOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1N0ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxMCBAQAog
I2RlZmluZSBTVFJJTkdJWkUoZXhwKSAjZXhwCiAjZGVmaW5lIFNUUklOR0laRV9WQUxVRV9PRihl
eHApIFNUUklOR0laRShleHApCiAKKyNkZWZpbmUgX19ST1VORF9VUF9UT19NVUxUSVBMRV9PRl9f
IFwKKyAgICBzaXplX3QgcmVtYWluZGVyTWFzayA9IGRpdmlzb3IgLSAxOyBcCisgICAgcmV0dXJu
ICh4ICsgcmVtYWluZGVyTWFzaykgJiB+cmVtYWluZGVyTWFzazsKKwogLyoKICAqIFRoZSByZWlu
dGVycHJldF9jYXN0PFR5cGUxKj4oW3BvaW50ZXIgdG8gVHlwZTJdKSBleHByZXNzaW9ucyAtIHdo
ZXJlCiAgKiBzaXplb2YoVHlwZTEpID4gc2l6ZW9mKFR5cGUyKSAtIGNhdXNlIHRoZSBmb2xsb3dp
bmcgd2FybmluZyBvbiBBUk0gd2l0aCBHQ0M6CkBAIC0xNTcsOSArMTYxLDExIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBTaXplPiBjaGFyICgKIHRlbXBsYXRlPHNpemVfdCBkaXZpc29y
PiBpbmxpbmUgc2l6ZV90IHJvdW5kVXBUb011bHRpcGxlT2Yoc2l6ZV90IHgpCiB7CiAgICAgQ09N
UElMRV9BU1NFUlQoZGl2aXNvciAmJiAhKGRpdmlzb3IgJiAoZGl2aXNvciAtIDEpKSwgZGl2aXNv
cl9pc19hX3Bvd2VyX29mX3R3byk7Ci0KLSAgICBzaXplX3QgcmVtYWluZGVyTWFzayA9IGRpdmlz
b3IgLSAxOwotICAgIHJldHVybiAoeCArIHJlbWFpbmRlck1hc2spICYgfnJlbWFpbmRlck1hc2s7
CisgICAgX19ST1VORF9VUF9UT19NVUxUSVBMRV9PRl9fCit9CitpbmxpbmUgc2l6ZV90IHJvdW5k
VXBUb011bHRpcGxlT2Yoc2l6ZV90IGRpdmlzb3IsIHNpemVfdCB4KQoreworICAgIF9fUk9VTkRf
VVBfVE9fTVVMVElQTEVfT0ZfXwogfQogCiBlbnVtIEJpbmFyeVNlYXJjaE1vZGUgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131466</attachid>
            <date>2012-03-12 17:27:24 -0700</date>
            <delta_ts>2012-03-13 10:54:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80615-20120312172736.patch</filename>
            <type>text/plain</type>
            <size>5419</size>
            <attacher name="Myles C. Maxfield">litherum</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEwMzU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDEyLTAzLTA5ICBNeWxlcyBNYXhmaWVsZCAgPG1tYXhmaWVsZEBnb29nbGUuY29tPgorCisg
ICAgICAgIENvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZU92ZXJzaXplIGFzc3VtZXMgc3lzdGVtIHBh
Z2Ugc2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODA2MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGhlYXAvQ29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6dHJ5QWxs
b2NhdGVPdmVyc2l6ZSk6CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZS5oOgorICAgICAgICAo
Q29waWVkU3BhY2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmg6
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpvdmVyc2l6ZUJsb2NrRm9yKToKKyAgICAgICAg
KiB3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaDoKKyAgICAgICAgKFdURjo6QnVtcFBvaW50ZXJQ
b29sOjpjcmVhdGUpOgorICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoKKyAgICAgICAgKFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZik6CisKIDIwMTItMDMtMDkgIEdhdmluIEJhcnJhY2xvdWdo
ICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFycmF5LnByb3RvdHlwZS50b0xv
Y2FsZVN0cmluZyB2aXNpdHMgZWxlbWVudHMgaW4gd3Jvbmcgb3JkZXIgdW5kZXIgY2VydGFpbiBj
b25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2Uu
Y3BwCShyZXZpc2lvbiAxMTAzNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3Bp
ZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDggKzcxLDggQEAgQ2hlY2tlZEJvb2xl
YW4gQ29waWVkU3BhY2U6OnRyeUFsbG9jYXRlTwogewogICAgIEFTU0VSVChpc092ZXJzaXplKGJ5
dGVzKSk7CiAgICAgCi0gICAgc2l6ZV90IGJsb2NrU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZjxzX3BhZ2VTaXplPihzaXplb2YoQ29waWVkQmxvY2spICsgYnl0ZXMpOwotICAgIFBhZ2VB
bGxvY2F0aW9uQWxpZ25lZCBhbGxvY2F0aW9uID0gUGFnZUFsbG9jYXRpb25BbGlnbmVkOjphbGxv
Y2F0ZShibG9ja1NpemUsIHNfcGFnZVNpemUsIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2VzKTsK
KyAgICBzaXplX3QgYmxvY2tTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKFdURjo6cGFn
ZVNpemUoKSwgc2l6ZW9mKENvcGllZEJsb2NrKSArIGJ5dGVzKTsKKyAgICBQYWdlQWxsb2NhdGlv
bkFsaWduZWQgYWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoYmxv
Y2tTaXplLCBXVEY6OnBhZ2VTaXplKCksIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2VzKTsKICAg
ICBpZiAoIXN0YXRpY19jYXN0PGJvb2w+KGFsbG9jYXRpb24pKSB7CiAgICAgICAgICpvdXRQdHIg
PSAwOwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDExMDM1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9PU0FsbG9jYXRvci5oPgog
I2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbkFsaWduZWQuaD4KKyNpbmNsdWRlIDx3dGYvUGFn
ZUJsb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmdQcmltaXRpdmVzLmg+CiAKQEAgLTExNiw4ICsxMTcsNiBAQCBwcml2YXRlOgogICAg
IHNpemVfdCBtX251bWJlck9mTG9hbmVkQmxvY2tzOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBzX21heEFsbG9jYXRpb25TaXplID0gMzIgKiBLQjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IHNfcGFnZVNpemUgPSA0ICogS0I7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX3BhZ2VNYXNr
ID0gfihzX3BhZ2VTaXplIC0gMSk7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2luaXRpYWxC
bG9ja051bSA9IDE2OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc19ibG9ja01hc2sgPSB+KEhl
YXBCbG9jazo6c19ibG9ja1NpemUgLSAxKTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24g
MTEwMzU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVN
ZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw3ICsxNzEsNyBAQCBpbmxpbmUgYm9vbCBD
b3BpZWRTcGFjZTo6aXNQaW5uZWQodm9pZCogCiAKIGlubGluZSBDb3BpZWRCbG9jayogQ29waWVk
U3BhY2U6Om92ZXJzaXplQmxvY2tGb3Iodm9pZCogcHRyKQogewotICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PENvcGllZEJsb2NrKj4ocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KHB0cikgJiBz
X3BhZ2VNYXNrKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb3BpZWRCbG9jayo+KHJl
aW50ZXJwcmV0X2Nhc3Q8c2l6ZV90PihwdHIpICYgV1RGOjpwYWdlTWFzaygpKTsKIH0KIAogaW5s
aW5lIENvcGllZEJsb2NrKiBDb3BpZWRTcGFjZTo6YmxvY2tGb3Iodm9pZCogcHRyKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYWdlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFnZUJsb2NrLmNwcAkocmV2aXNpb24gMTEwMzU5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYWdlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Nyw0ICs2Nyw5IEBAIHNpemVfdCBwYWdlU2l6ZSgpCiAgICAgcmV0dXJuIHNfcGFnZVNp
emU7CiB9CiAKK3NpemVfdCBwYWdlTWFzaygpCit7CisgICAgcmV0dXJuIH4ocGFnZVNpemUoKSAt
IDEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGFnZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9QYWdlQmxvY2suaAkocmV2aXNpb24gMTEwMzU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QYWdlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogbmFtZXNw
YWNlIFdURiB7CiAKIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgcGFnZVNpemUoKTsKK1dURl9F
WFBPUlRfUFJJVkFURSBzaXplX3QgcGFnZU1hc2soKTsKIGlubGluZSBib29sIGlzUGFnZUFsaWdu
ZWQodm9pZCogYWRkcmVzcykgeyByZXR1cm4gIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pihh
ZGRyZXNzKSAmIChwYWdlU2l6ZSgpIC0gMSkpOyB9CiBpbmxpbmUgYm9vbCBpc1BhZ2VBbGlnbmVk
KHNpemVfdCBzaXplKSB7IHJldHVybiAhKHNpemUgJiAocGFnZVNpemUoKSAtIDEpKTsgfQogaW5s
aW5lIGJvb2wgaXNQb3dlck9mVHdvKHNpemVfdCBzaXplKSB7IHJldHVybiAhKHNpemUgJiAoc2l6
ZSAtIDEpKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGRMaWJFeHRyYXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0ZExpYkV4dHJhcy5o
CShyZXZpc2lvbiAxMTAzNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0ZExpYkV4
dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxMCBAQAogI2RlZmluZSBTVFJJTkdJ
WkUoZXhwKSAjZXhwCiAjZGVmaW5lIFNUUklOR0laRV9WQUxVRV9PRihleHApIFNUUklOR0laRShl
eHApCiAKKyNkZWZpbmUgUk9VTkRfVVBfVE9fTVVMVElQTEVfT0YoZGl2aXNvciwgeCkgXAorICAg
IHNpemVfdCByZW1haW5kZXJNYXNrID0gZGl2aXNvciAtIDE7IFwKKyAgICByZXR1cm4gKHggKyBy
ZW1haW5kZXJNYXNrKSAmIH5yZW1haW5kZXJNYXNrOworCiAvKgogICogVGhlIHJlaW50ZXJwcmV0
X2Nhc3Q8VHlwZTEqPihbcG9pbnRlciB0byBUeXBlMl0pIGV4cHJlc3Npb25zIC0gd2hlcmUKICAq
IHNpemVvZihUeXBlMSkgPiBzaXplb2YoVHlwZTIpIC0gY2F1c2UgdGhlIGZvbGxvd2luZyB3YXJu
aW5nIG9uIEFSTSB3aXRoIEdDQzoKQEAgLTE1Nyw5ICsxNjEsMTEgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IFNpemU+IGNoYXIgKAogdGVtcGxhdGU8c2l6ZV90IGRpdmlzb3I+IGlubGlu
ZSBzaXplX3Qgcm91bmRVcFRvTXVsdGlwbGVPZihzaXplX3QgeCkKIHsKICAgICBDT01QSUxFX0FT
U0VSVChkaXZpc29yICYmICEoZGl2aXNvciAmIChkaXZpc29yIC0gMSkpLCBkaXZpc29yX2lzX2Ff
cG93ZXJfb2ZfdHdvKTsKLQotICAgIHNpemVfdCByZW1haW5kZXJNYXNrID0gZGl2aXNvciAtIDE7
Ci0gICAgcmV0dXJuICh4ICsgcmVtYWluZGVyTWFzaykgJiB+cmVtYWluZGVyTWFzazsKKyAgICBS
T1VORF9VUF9UT19NVUxUSVBMRV9PRihkaXZpc29yLCB4KTsKK30KK2lubGluZSBzaXplX3Qgcm91
bmRVcFRvTXVsdGlwbGVPZihzaXplX3QgZGl2aXNvciwgc2l6ZV90IHgpCit7CisgICAgUk9VTkRf
VVBfVE9fTVVMVElQTEVfT0YoZGl2aXNvciwgeCk7CiB9CiAKIGVudW0gQmluYXJ5U2VhcmNoTW9k
ZSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131667</attachid>
            <date>2012-03-13 10:54:33 -0700</date>
            <delta_ts>2012-03-15 16:04:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80615-20120313105432.patch</filename>
            <type>text/plain</type>
            <size>5445</size>
            <attacher name="Myles C. Maxfield">litherum</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEwMzU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDEyLTAzLTA5ICBNeWxlcyBNYXhmaWVsZCAgPG1tYXhmaWVsZEBnb29nbGUuY29tPgorCisg
ICAgICAgIENvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZU92ZXJzaXplIGFzc3VtZXMgc3lzdGVtIHBh
Z2Ugc2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODA2MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGhlYXAvQ29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6dHJ5QWxs
b2NhdGVPdmVyc2l6ZSk6CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZS5oOgorICAgICAgICAo
Q29waWVkU3BhY2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmg6
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpvdmVyc2l6ZUJsb2NrRm9yKToKKyAgICAgICAg
KiB3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaDoKKyAgICAgICAgKFdURjo6QnVtcFBvaW50ZXJQ
b29sOjpjcmVhdGUpOgorICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoKKyAgICAgICAgKFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZik6CisKIDIwMTItMDMtMDkgIEdhdmluIEJhcnJhY2xvdWdo
ICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFycmF5LnByb3RvdHlwZS50b0xv
Y2FsZVN0cmluZyB2aXNpdHMgZWxlbWVudHMgaW4gd3Jvbmcgb3JkZXIgdW5kZXIgY2VydGFpbiBj
b25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2Uu
Y3BwCShyZXZpc2lvbiAxMTAzNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3Bp
ZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDggKzcxLDggQEAgQ2hlY2tlZEJvb2xl
YW4gQ29waWVkU3BhY2U6OnRyeUFsbG9jYXRlTwogewogICAgIEFTU0VSVChpc092ZXJzaXplKGJ5
dGVzKSk7CiAgICAgCi0gICAgc2l6ZV90IGJsb2NrU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZjxzX3BhZ2VTaXplPihzaXplb2YoQ29waWVkQmxvY2spICsgYnl0ZXMpOwotICAgIFBhZ2VB
bGxvY2F0aW9uQWxpZ25lZCBhbGxvY2F0aW9uID0gUGFnZUFsbG9jYXRpb25BbGlnbmVkOjphbGxv
Y2F0ZShibG9ja1NpemUsIHNfcGFnZVNpemUsIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2VzKTsK
KyAgICBzaXplX3QgYmxvY2tTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKFdURjo6cGFn
ZVNpemUoKSwgc2l6ZW9mKENvcGllZEJsb2NrKSArIGJ5dGVzKTsKKyAgICBQYWdlQWxsb2NhdGlv
bkFsaWduZWQgYWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoYmxv
Y2tTaXplLCBXVEY6OnBhZ2VTaXplKCksIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2VzKTsKICAg
ICBpZiAoIXN0YXRpY19jYXN0PGJvb2w+KGFsbG9jYXRpb24pKSB7CiAgICAgICAgICpvdXRQdHIg
PSAwOwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDExMDM1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9PU0FsbG9jYXRvci5oPgog
I2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbkFsaWduZWQuaD4KKyNpbmNsdWRlIDx3dGYvUGFn
ZUJsb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmdQcmltaXRpdmVzLmg+CiAKQEAgLTExNiw4ICsxMTcsNiBAQCBwcml2YXRlOgogICAg
IHNpemVfdCBtX251bWJlck9mTG9hbmVkQmxvY2tzOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBzX21heEFsbG9jYXRpb25TaXplID0gMzIgKiBLQjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IHNfcGFnZVNpemUgPSA0ICogS0I7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX3BhZ2VNYXNr
ID0gfihzX3BhZ2VTaXplIC0gMSk7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2luaXRpYWxC
bG9ja051bSA9IDE2OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc19ibG9ja01hc2sgPSB+KEhl
YXBCbG9jazo6c19ibG9ja1NpemUgLSAxKTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24g
MTEwMzU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVN
ZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw3ICsxNzEsNyBAQCBpbmxpbmUgYm9vbCBD
b3BpZWRTcGFjZTo6aXNQaW5uZWQodm9pZCogCiAKIGlubGluZSBDb3BpZWRCbG9jayogQ29waWVk
U3BhY2U6Om92ZXJzaXplQmxvY2tGb3Iodm9pZCogcHRyKQogewotICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PENvcGllZEJsb2NrKj4ocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KHB0cikgJiBz
X3BhZ2VNYXNrKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb3BpZWRCbG9jayo+KHJl
aW50ZXJwcmV0X2Nhc3Q8c2l6ZV90PihwdHIpICYgV1RGOjpwYWdlTWFzaygpKTsKIH0KIAogaW5s
aW5lIENvcGllZEJsb2NrKiBDb3BpZWRTcGFjZTo6YmxvY2tGb3Iodm9pZCogcHRyKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYWdlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFnZUJsb2NrLmNwcAkocmV2aXNpb24gMTEwMzU5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYWdlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw2ICszOCw3IEBACiBuYW1lc3BhY2UgV1RGIHsKIAogc3RhdGljIHNpemVfdCBzX3Bh
Z2VTaXplOworc3RhdGljIHNpemVfdCBzX3BhZ2VNYXNrOwogCiAjaWYgT1MoVU5JWCkKIApAQCAt
NjcsNCArNjgsMTEgQEAgc2l6ZV90IHBhZ2VTaXplKCkKICAgICByZXR1cm4gc19wYWdlU2l6ZTsK
IH0KIAorc2l6ZV90IHBhZ2VNYXNrKCkKK3sKKyAgICBpZiAoIXNfcGFnZU1hc2spCisgICAgICAg
IHNfcGFnZU1hc2sgPSB+KHBhZ2VTaXplKCkgLSAxKTsKKyAgICByZXR1cm4gc19wYWdlTWFzazsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1BhZ2VCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFn
ZUJsb2NrLmgJKHJldmlzaW9uIDExMDM1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
UGFnZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIG5hbWVzcGFjZSBX
VEYgewogCiBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHBhZ2VTaXplKCk7CitXVEZfRVhQT1JU
X1BSSVZBVEUgc2l6ZV90IHBhZ2VNYXNrKCk7CiBpbmxpbmUgYm9vbCBpc1BhZ2VBbGlnbmVkKHZv
aWQqIGFkZHJlc3MpIHsgcmV0dXJuICEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oYWRkcmVz
cykgJiAocGFnZVNpemUoKSAtIDEpKTsgfQogaW5saW5lIGJvb2wgaXNQYWdlQWxpZ25lZChzaXpl
X3Qgc2l6ZSkgeyByZXR1cm4gIShzaXplICYgKHBhZ2VTaXplKCkgLSAxKSk7IH0KIGlubGluZSBi
b29sIGlzUG93ZXJPZlR3byhzaXplX3Qgc2l6ZSkgeyByZXR1cm4gIShzaXplICYgKHNpemUgLSAx
KSk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RkTGliRXh0cmFzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2
aXNpb24gMTEwMzU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGRMaWJFeHRyYXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDEyICsxNTQsMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IFNpemU+IGNoYXIgKAogI2RlZmluZSBXVEZfQVJSQVlfTEVOR1RIKGFycmF5KSBz
aXplb2YoOjpXVEY6OkFycmF5TGVuZ3RoSGVscGVyRnVuY3Rpb24oYXJyYXkpKQogCiAvLyBFZmZp
Y2llbnQgaW1wbGVtZW50YXRpb24gdGhhdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgcG93ZXJzIG9mIHR3
by4KK2lubGluZSBzaXplX3Qgcm91bmRVcFRvTXVsdGlwbGVPZihzaXplX3QgZGl2aXNvciwgc2l6
ZV90IHgpCit7CisgICAgQVNTRVJUKGRpdmlzb3IgJiYgIShkaXZpc29yICYgKGRpdmlzb3IgLSAx
KSkpOworICAgIHNpemVfdCByZW1haW5kZXJNYXNrID0gZGl2aXNvciAtIDE7IFwKKyAgICByZXR1
cm4gKHggKyByZW1haW5kZXJNYXNrKSAmIH5yZW1haW5kZXJNYXNrOworfQogdGVtcGxhdGU8c2l6
ZV90IGRpdmlzb3I+IGlubGluZSBzaXplX3Qgcm91bmRVcFRvTXVsdGlwbGVPZihzaXplX3QgeCkK
IHsKICAgICBDT01QSUxFX0FTU0VSVChkaXZpc29yICYmICEoZGl2aXNvciAmIChkaXZpc29yIC0g
MSkpLCBkaXZpc29yX2lzX2FfcG93ZXJfb2ZfdHdvKTsKLQotICAgIHNpemVfdCByZW1haW5kZXJN
YXNrID0gZGl2aXNvciAtIDE7Ci0gICAgcmV0dXJuICh4ICsgcmVtYWluZGVyTWFzaykgJiB+cmVt
YWluZGVyTWFzazsKKyAgICByZXR1cm4gcm91bmRVcFRvTXVsdGlwbGVPZihkaXZpc29yLCB4KTsK
IH0KIAogZW51bSBCaW5hcnlTZWFyY2hNb2RlIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>