<?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>96201</bug_id>
          
          <creation_ts>2012-09-09 04:10:43 -0700</creation_ts>
          <short_desc>[EFL][WK2] WKEinaSharedString needs a function to adopt eina stringshare.</short_desc>
          <delta_ts>2012-09-11 02:36:20 -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>WebKit EFL</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>
          
          <blocked>95672</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Byungwoo Lee">bw80.lee</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cdumez</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hausmann</cc>
    
    <cc>jinwoo7.song</cc>
    
    <cc>kenneth</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>715474</commentid>
    <comment_count>0</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-09-09 04:10:43 -0700</bug_when>
    <thetext>WKEinaSharedString class needs some mechanism like adoptRef and PassRefPtr.
Without this, calling additional eina_stringshare_del() function will be needed in some case for preventing memory leak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715528</commentid>
    <comment_count>1</comment_count>
      <attachid>163001</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-09-09 10:21:27 -0700</bug_when>
    <thetext>Created attachment 163001
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715539</commentid>
    <comment_count>2</comment_count>
      <attachid>163001</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-09-09 11:11:01 -0700</bug_when>
    <thetext>Comment on attachment 163001
Patch

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

&gt; Source/WebKit2/UIProcess/API/cpp/efl/WKEinaSharedString.h:73
&gt; +WK_EXPORT WKEinaSharedString adoptEinaStringShare(const char* string);

Why not make it an overloaded constructor instead? WKEinaSharedString(AdoptTag, const char*) ? Seems more consistent with other adoption patterns in WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715650</commentid>
    <comment_count>3</comment_count>
      <attachid>163001</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-09 18:03:54 -0700</bug_when>
    <thetext>Comment on attachment 163001
Patch

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

&gt; Source/WebKit2/ChangeLog:8
&gt; +        WKEinaSharedString needs a to adopt eina stringshare directly.

s/needs a to/needs to/g ?

&gt; Source/WebKit2/UIProcess/API/cpp/efl/WKEinaSharedString.h:67
&gt; +    // adopting constructor

// adopting -&gt; // Adopting</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715690</commentid>
    <comment_count>4</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-09-09 21:07:12 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 163001 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=163001&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/cpp/efl/WKEinaSharedString.h:73
&gt; &gt; +WK_EXPORT WKEinaSharedString adoptEinaStringShare(const char* string);
&gt; 
&gt; Why not make it an overloaded constructor instead? WKEinaSharedString(AdoptTag, const char*) ? Seems more consistent with other adoption patterns in WebKit.


Yes, I considered using WKAdoptTag initially, but that seems to be designed to adopt data from api object type (WKXXX) that is related with APIObject and Opaque types.
(This seems to be a reason that the adopt tag name is &apos;AdoptWK&apos; - adopting WK api object)

But the data that this function tries to adopt is not WK api object type, but eina stringshare which is provided by efl platform and has it&apos;s own ref, unref function - eina_stringshare_add, eina_stringshare_del)
And Wrapper class for the eina stringshare is that WKEinaSharedString.
So I decided not to use AdoptWK tag but add a function for adopt.
(I referenced the adoptRef() function, and the function also defined as a friend function of PassRefPtr)

If there is any way that I can apply the adoption pattern with AdoptTag, please share it. It will be very helpful.

Thank you :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715693</commentid>
    <comment_count>5</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-09-09 21:09:31 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 163001 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=163001&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:8
&gt; &gt; +        WKEinaSharedString needs a to adopt eina stringshare directly.
&gt; 
&gt; s/needs a to/needs to/g ?
Oops, typo. I&apos;ll fix it.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/cpp/efl/WKEinaSharedString.h:67
&gt; &gt; +    // adopting constructor
&gt; 
&gt; // adopting -&gt; // Adopting
Ok~ I&apos;ll fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715710</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-09-09 22:05:54 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 163001 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=163001&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/cpp/efl/WKEinaSharedString.h:73
&gt; &gt; &gt; +WK_EXPORT WKEinaSharedString adoptEinaStringShare(const char* string);
&gt; &gt; 
&gt; &gt; Why not make it an overloaded constructor instead? WKEinaSharedString(AdoptTag, const char*) ? Seems more consistent with other adoption patterns in WebKit.
&gt; 
&gt; 
&gt; Yes, I considered using WKAdoptTag initially, but that seems to be designed to adopt data from api object type (WKXXX) that is related with APIObject and Opaque types.
&gt; (This seems to be a reason that the adopt tag name is &apos;AdoptWK&apos; - adopting WK api object)
&gt; 
&gt; But the data that this function tries to adopt is not WK api object type, but eina stringshare which is provided by efl platform and has it&apos;s own ref, unref function - eina_stringshare_add, eina_stringshare_del)
&gt; And Wrapper class for the eina stringshare is that WKEinaSharedString.
&gt; So I decided not to use AdoptWK tag but add a function for adopt.
&gt; (I referenced the adoptRef() function, and the function also defined as a friend function of PassRefPtr)
&gt; 
&gt; If there is any way that I can apply the adoption pattern with AdoptTag, please share it. It will be very helpful.

Don&apos;t worry, I doubt anybody is going to complain if you decide to use the pattern in a slightly different way in _your_ API :)

That said, it&apos;s completely up to you. This is a question of aesthetics, i.e. which approach you find more readable on the caller side and which approach creates a cleaner implementation.

You could also consider using a new tag, like AdoptCF and AdoptNS are used in WTF for the adoption of CoreFoundation and NextStep objects that follow the same reference counting pattern.

Anyway, just saying that it&apos;s up to you - whichever you like better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715723</commentid>
    <comment_count>7</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-09-09 22:39:01 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; (From update of attachment 163001 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=163001&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit2/UIProcess/API/cpp/efl/WKEinaSharedString.h:73
&gt; &gt; &gt; &gt; +WK_EXPORT WKEinaSharedString adoptEinaStringShare(const char* string);
&gt; &gt; &gt; 
&gt; &gt; &gt; Why not make it an overloaded constructor instead? WKEinaSharedString(AdoptTag, const char*) ? Seems more consistent with other adoption patterns in WebKit.
&gt; &gt; 
&gt; &gt; 
&gt; &gt; Yes, I considered using WKAdoptTag initially, but that seems to be designed to adopt data from api object type (WKXXX) that is related with APIObject and Opaque types.
&gt; &gt; (This seems to be a reason that the adopt tag name is &apos;AdoptWK&apos; - adopting WK api object)
&gt; &gt; 
&gt; &gt; But the data that this function tries to adopt is not WK api object type, but eina stringshare which is provided by efl platform and has it&apos;s own ref, unref function - eina_stringshare_add, eina_stringshare_del)
&gt; &gt; And Wrapper class for the eina stringshare is that WKEinaSharedString.
&gt; &gt; So I decided not to use AdoptWK tag but add a function for adopt.
&gt; &gt; (I referenced the adoptRef() function, and the function also defined as a friend function of PassRefPtr)
&gt; &gt; 
&gt; &gt; If there is any way that I can apply the adoption pattern with AdoptTag, please share it. It will be very helpful.
&gt; 
&gt; Don&apos;t worry, I doubt anybody is going to complain if you decide to use the pattern in a slightly different way in _your_ API :)
&gt; 
&gt; That said, it&apos;s completely up to you. This is a question of aesthetics, i.e. which approach you find more readable on the caller side and which approach creates a cleaner implementation.
&gt; 
&gt; You could also consider using a new tag, like AdoptCF and AdoptNS are used in WTF for the adoption of CoreFoundation and NextStep objects that follow the same reference counting pattern.
&gt; 
&gt; Anyway, just saying that it&apos;s up to you - whichever you like better.

Thank you for the kind explanation.
A thought about creating a new tag like below, but I&apos;m not sure whether this is acceptable.


Source/WebKit2/UIProcess/API/cpp/efl/WKEinaSharedString.h
...
+ enum EinaAdoptTag { AdoptEinaStringShare };
...
+ WKEinaSharedString(EinaAdoptTag, const char* string);



Source/WebKit2/UIProcess/API/cpp/efl/WKEinaSharedString.cpp
*WKEinaSharedString::WKEinaSharedString(EinaAdoptTag adoptTag, const char* string)
+    : m_string(string)
+{
+    ASSERT(adoptTag == AdoptEinaStringShare); // Guard for future enum chang
+}


How about this approach? I think this is more simple and matches with other adoptation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715776</commentid>
    <comment_count>8</comment_count>
      <attachid>163001</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-09-10 00:24:26 -0700</bug_when>
    <thetext>Comment on attachment 163001
Patch

At first WKEinaSharedString class contains already WKEinaSharedString(WKAdoptTag, WKStringRef); so there is no need to inject friend functions 
and private constructors, you can follow existing pattern.
Secondly, WKAdoptTag is quite OK to use here IMHO, and it will look much more readable than just &apos;bool&apos;.
Thirdly, adoption is needed for the strings which have been already shared, right? So why don&apos;t you point that out? We could use 
&apos;Eina_Stringshare *&apos; type for the argument.

Informal R-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715802</commentid>
    <comment_count>9</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-09-10 01:04:06 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 163001 [details])
&gt; At first WKEinaSharedString class contains already WKEinaSharedString(WKAdoptTag, WKStringRef); so there is no need to inject friend functions 
&gt; and private constructors, you can follow existing pattern.
This patch is come from the patch 95672 for some requirement that handles eina stringhshare data that run_javascript_prompt() callback returns.
(I think that the callback cannot return WKStringRef because it is the smart class member function)
In the application side, eina stringshare will be returned by the callback.
For preventing memory leak, adopt function for eina stringshare is needed.

&gt; Secondly, WKAdoptTag is quite OK to use here IMHO, and it will look much more readable than just &apos;bool&apos;.
Is it ok to use WKAdoptTag (adoptWK) for eina_stringshare even if it is not a WK api object?

&gt; Thirdly, adoption is needed for the strings which have been already shared, right? So why don&apos;t you point that out? We could use 
&gt; &apos;Eina_Stringshare *&apos; type for the argument.
Thanks for pointing this. It will be more clear than const char*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715816</commentid>
    <comment_count>10</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-09-10 01:21:11 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 163001 [details] [details])
&gt; &gt; At first WKEinaSharedString class contains already WKEinaSharedString(WKAdoptTag, WKStringRef); so there is no need to inject friend functions 
&gt; &gt; and private constructors, you can follow existing pattern.
&gt; This patch is come from the patch 95672 for some requirement that handles eina stringhshare data that run_javascript_prompt() callback returns.
&gt; (I think that the callback cannot return WKStringRef because it is the smart class member function)
&gt; In the application side, eina stringshare will be returned by the callback.
&gt; For preventing memory leak, adopt function for eina stringshare is needed.
&gt; 
I just meant that it should be just (one more) adopt constructor and not adopt function.

&gt; &gt; Secondly, WKAdoptTag is quite OK to use here IMHO, and it will look much more readable than just &apos;bool&apos;.
&gt; Is it ok to use WKAdoptTag (adoptWK) for eina_stringshare even if it is not a WK api object?

I think yes, unless we want to introduce our own tag, I would use existing
one..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715822</commentid>
    <comment_count>11</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-09-10 01:30:05 -0700</bug_when>
    <thetext>&gt; &gt; Is it ok to use WKAdoptTag (adoptWK) for eina_stringshare even if it is not a WK api object?
&gt; 
&gt; I think yes, unless we want to introduce our own tag, I would use existing
&gt; one..
Another option is to add a new static member like &apos;static WKEinaSharedString fromEinaStringShare(Eina_Stringshare*);&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715878</commentid>
    <comment_count>12</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-09-10 02:57:57 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; &gt; Is it ok to use WKAdoptTag (adoptWK) for eina_stringshare even if it is not a WK api object?
&gt; &gt; 
&gt; &gt; I think yes, unless we want to introduce our own tag, I would use existing
&gt; &gt; one..
I think using WKAdoptTag for eina_stringshare can make human mistakes or misunderstanding, because some related template functions and class (e.g. WKRetainPtr, adoptWK()...) are also opened by cpp apis.

If a constructor uses WKAdoptTag for adopting eina_stringshare, api user can try to use adoptWK() function for eina_stringshare, because it already used in the header file.

How about your opinion?

&gt; Another option is to add a new static member like &apos;static WKEinaSharedString fromEinaStringShare(Eina_Stringshare*);&apos;
Ok, I think this is the issue about static function and friend function.

I also thought about this, and followed the way that adoptPtr() or adoptRef() is designed because it is slightly easy for api users.

With static function,
create sharedstring by adoption will be as below
WKEinaSharedString string = WKEinaSharedString::fromEinaStringShare(eina_stringshare_add(testString))

And with friend function,
create sharedstring by adoption will be as below
WKEinaSharedString string = adoptEinaStringShare(eina_stringshare_add(testString))

after we added below line in the header file.
+ using WebKit::adoptEinaStringShare(...);

I prefer the second personally (for an api user), but If there is some reason that this should be a static function, I&apos;ll change it.

Thanks for your comments :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715883</commentid>
    <comment_count>13</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-09-10 03:12:36 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; &gt; &gt; Is it ok to use WKAdoptTag (adoptWK) for eina_stringshare even if it is not a WK api object?
&gt; &gt; &gt; 
&gt; &gt; &gt; I think yes, unless we want to introduce our own tag, I would use existing
&gt; &gt; &gt; one..
&gt; I think using WKAdoptTag for eina_stringshare can make human mistakes or misunderstanding, because some related template functions and class (e.g. WKRetainPtr, adoptWK()...) are also opened by cpp apis.
&gt; 
&gt; If a constructor uses WKAdoptTag for adopting eina_stringshare, api user can try to use adoptWK() function for eina_stringshare, because it already used in the header file.
&gt; 
&gt; How about your opinion?
&gt; 
&gt; &gt; Another option is to add a new static member like &apos;static WKEinaSharedString fromEinaStringShare(Eina_Stringshare*);&apos;
&gt; Ok, I think this is the issue about static function and friend function.
&gt; 
&gt; I also thought about this, and followed the way that adoptPtr() or adoptRef() is designed because it is slightly easy for api users.
&gt; 
&gt; With static function,
&gt; create sharedstring by adoption will be as below
&gt; WKEinaSharedString string = WKEinaSharedString::fromEinaStringShare(eina_stringshare_add(testString))
&gt; 
&gt; And with friend function,
&gt; create sharedstring by adoption will be as below
&gt; WKEinaSharedString string = adoptEinaStringShare(eina_stringshare_add(testString))
&gt; 
&gt; after we added below line in the header file.
&gt; + using WebKit::adoptEinaStringShare(...);
&gt; 
&gt; I prefer the second personally (for an api user), but If there is some reason that this should be a static function, I&apos;ll change it.
&gt; 
&gt; Thanks for your comments :)
I would personally go with static function approach, as it looks more explicit for me and produces better-looking code.. But let&apos;s see what reviewers will tell. We could think also about how to to make the method name shorter, what about WKEinaSharedString::adopt() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715895</commentid>
    <comment_count>14</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-09-10 03:43:57 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; &gt; &gt; Is it ok to use WKAdoptTag (adoptWK) for eina_stringshare even if it is not a WK api object?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I think yes, unless we want to introduce our own tag, I would use existing
&gt; &gt; &gt; &gt; one..
&gt; &gt; I think using WKAdoptTag for eina_stringshare can make human mistakes or misunderstanding, because some related template functions and class (e.g. WKRetainPtr, adoptWK()...) are also opened by cpp apis.
&gt; &gt; 
&gt; &gt; If a constructor uses WKAdoptTag for adopting eina_stringshare, api user can try to use adoptWK() function for eina_stringshare, because it already used in the header file.
&gt; &gt; 
&gt; &gt; How about your opinion?
&gt; &gt; 
&gt; &gt; &gt; Another option is to add a new static member like &apos;static WKEinaSharedString fromEinaStringShare(Eina_Stringshare*);&apos;
&gt; &gt; Ok, I think this is the issue about static function and friend function.
&gt; &gt; 
&gt; &gt; I also thought about this, and followed the way that adoptPtr() or adoptRef() is designed because it is slightly easy for api users.
&gt; &gt; 
&gt; &gt; With static function,
&gt; &gt; create sharedstring by adoption will be as below
&gt; &gt; WKEinaSharedString string = WKEinaSharedString::fromEinaStringShare(eina_stringshare_add(testString))
&gt; &gt; 
&gt; &gt; And with friend function,
&gt; &gt; create sharedstring by adoption will be as below
&gt; &gt; WKEinaSharedString string = adoptEinaStringShare(eina_stringshare_add(testString))
&gt; &gt; 
&gt; &gt; after we added below line in the header file.
&gt; &gt; + using WebKit::adoptEinaStringShare(...);
&gt; &gt; 
&gt; &gt; I prefer the second personally (for an api user), but If there is some reason that this should be a static function, I&apos;ll change it.
&gt; &gt; 
&gt; &gt; Thanks for your comments :)
&gt; I would personally go with static function approach, as it looks more explicit for me and produces better-looking code.. But let&apos;s see what reviewers will tell. We could think also about how to to make the method name shorter, what about WKEinaSharedString::adopt() ?

Ok, it can be more explicit as you said, and short function name will be good for using.
I&apos;ll apply it. Thanks :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715897</commentid>
    <comment_count>15</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-10 03:48:31 -0700</bug_when>
    <thetext>
&gt; Ok, it can be more explicit as you said, and short function name will be good for using.
&gt; I&apos;ll apply it. Thanks :)

adoptEinaStringShare()
WKEinaSharedString::adopt()

Are pretty much the same length and the latter doesn&apos;t require you to add any &apos;using&apos; lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715921</commentid>
    <comment_count>16</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-09-10 04:23:54 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; Ok, it can be more explicit as you said, and short function name will be good for using.
&gt; &gt; I&apos;ll apply it. Thanks :)
&gt; 
&gt; adoptEinaStringShare()
&gt; WKEinaSharedString::adopt()
&gt; 
&gt; Are pretty much the same length and the latter doesn&apos;t require you to add any &apos;using&apos; lines.

Yes, I&apos;m applying it. Thanks for point other good point :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715923</commentid>
    <comment_count>17</comment_count>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-09-10 04:31:54 -0700</bug_when>
    <thetext>BTW, the class name, WKEinaSharedString seems to be out of sync  with EFL&apos;s Eina_StringShare.
http://docs.enlightenment.org/auto/eina/group__Eina__Stringshare__Group.html

Is there anyone who knows the reason? IMO, WKEinaStringShare looks more consistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715929</commentid>
    <comment_count>18</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-09-10 04:40:55 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; BTW, the class name, WKEinaSharedString seems to be out of sync  with EFL&apos;s Eina_StringShare.
&gt; http://docs.enlightenment.org/auto/eina/group__Eina__Stringshare__Group.html
&gt; 
&gt; Is there anyone who knows the reason? IMO, WKEinaStringShare looks more consistent.

The existing name better reflects purpose of this class. WKEinaSharedString represents &apos;string&apos; rather than &apos;share&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716009</commentid>
    <comment_count>19</comment_count>
      <attachid>163110</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-09-10 06:17:15 -0700</bug_when>
    <thetext>Created attachment 163110
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716011</commentid>
    <comment_count>20</comment_count>
      <attachid>163110</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-09-10 06:21:54 -0700</bug_when>
    <thetext>Comment on attachment 163110
Patch

LGTM. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716097</commentid>
    <comment_count>21</comment_count>
      <attachid>163110</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-10 08:23:36 -0700</bug_when>
    <thetext>Comment on attachment 163110
Patch

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

&gt; Source/WebKit2/UIProcess/API/cpp/efl/WKEinaSharedString.cpp:114
&gt; +{
&gt; +    WKEinaSharedString sharedString;
&gt; +    sharedString.m_string = static_cast&lt;const char*&gt;(string);
&gt; +    return sharedString;
&gt; +}

So that will copy and deallocate the local one. I suppose the copy constructor is effective :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716737</commentid>
    <comment_count>22</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-09-10 17:55:47 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 163110 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=163110&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/cpp/efl/WKEinaSharedString.cpp:114
&gt; &gt; +{
&gt; &gt; +    WKEinaSharedString sharedString;
&gt; &gt; +    sharedString.m_string = static_cast&lt;const char*&gt;(string);
&gt; &gt; +    return sharedString;
&gt; &gt; +}
&gt; 
&gt; So that will copy and deallocate the local one. I suppose the copy constructor is effective :-)
Ok~ then I&apos;ll add some private constructor that just adopt eina_stringshare, and use it.
But I have a question.
On the previous patch, I defined the private constructor like below.
+    // Aopting constructor
+    WKEinaSharedString(Eina_Stringshare* string, bool) : m_string(string) { }

I referenced the adopting constructor of PassRefPtr.
Additional bool parameter seems to have some purpose for preventing some mistakes.
Should I follow this way for WKEinaSharedString?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716896</commentid>
    <comment_count>23</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-11 00:22:18 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; (From update of attachment 163110 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=163110&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/cpp/efl/WKEinaSharedString.cpp:114
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    WKEinaSharedString sharedString;
&gt; &gt; &gt; +    sharedString.m_string = static_cast&lt;const char*&gt;(string);
&gt; &gt; &gt; +    return sharedString;
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; So that will copy and deallocate the local one. I suppose the copy constructor is effective :-)
&gt; Ok~ then I&apos;ll add some private constructor that just adopt eina_stringshare, and use it.

The code is fine, I just wanted you to verify that the copying is efficient. Or if not, implement an efficient copy constructor. I guess the class only has one pointer (m_string?) so it is quite efficient</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716898</commentid>
    <comment_count>24</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-09-11 00:27:22 -0700</bug_when>
    <thetext>&gt; The code is fine, I just wanted you to verify that the copying is efficient. Or if not, implement an efficient copy constructor. I guess the class only has one pointer (m_string?) so it is quite efficient

I also think that copy constructor will be good and efficient if the coding style is ok.
Thank you for your guide :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716904</commentid>
    <comment_count>25</comment_count>
      <attachid>163110</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-11 00:32:33 -0700</bug_when>
    <thetext>Comment on attachment 163110
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_eina_shared_string.cpp:87
&gt; +    WKEinaSharedString string(WKEinaSharedString::adopt(eina_stringshare_add(testString)));
&gt; +    checkString(string, testString);
&gt; +
&gt; +    string = WKEinaSharedString::adopt(eina_stringshare_add(anotherTestString));
&gt; +    checkString(string, anotherTestString);
&gt; +
&gt; +    string = string;
&gt; +    checkString(string, anotherTestString);

Why not test that the first one got free&apos;d?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716919</commentid>
    <comment_count>26</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-09-11 00:53:46 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 163110 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=163110&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_eina_shared_string.cpp:87
&gt; &gt; +    WKEinaSharedString string(WKEinaSharedString::adopt(eina_stringshare_add(testString)));
&gt; &gt; +    checkString(string, testString);
&gt; &gt; +
&gt; &gt; +    string = WKEinaSharedString::adopt(eina_stringshare_add(anotherTestString));
&gt; &gt; +    checkString(string, anotherTestString);
&gt; &gt; +
&gt; &gt; +    string = string;
&gt; &gt; +    checkString(string, anotherTestString);
&gt; 
&gt; Why not test that the first one got free&apos;d?
Yes, I want to test it, but I think there is no way to verify whether the first one got free&apos;d or not, because there is no api to get the reference count for the eina_stringshare, and accessing free&apos;d eina_stringshare can make segmentation fault according to the eina_stringshare.h

The thing that we can get from this test case is that,
eina_stringshare_del() function in WKEinaSharedString destructor will not make a segmentation fault even if we created it by adopting eina_stringshare directly (without eina_stringshare_ref()).

With this, I can think that the eina_stringshare that adopted by WKEinaSharedString will be deallocated by it&apos;s destructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716928</commentid>
    <comment_count>27</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-09-11 01:13:10 -0700</bug_when>
    <thetext>I&apos;m applying the last comment from kenneth about coping constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716938</commentid>
    <comment_count>28</comment_count>
      <attachid>163299</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-09-11 01:29:05 -0700</bug_when>
    <thetext>Created attachment 163299
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716939</commentid>
    <comment_count>29</comment_count>
      <attachid>163299</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-11 01:29:30 -0700</bug_when>
    <thetext>Comment on attachment 163299
Patch

Rejecting attachment 163299 from commit-queue.

bw80.lee@samsung.com does not have committer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716979</commentid>
    <comment_count>30</comment_count>
      <attachid>163110</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-11 02:36:14 -0700</bug_when>
    <thetext>Comment on attachment 163110
Patch

Clearing flags on attachment: 163110

Committed r128160: &lt;http://trac.webkit.org/changeset/128160&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716980</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-11 02:36:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163001</attachid>
            <date>2012-09-09 10:21:27 -0700</date>
            <delta_ts>2012-09-10 06:17:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96201-20120910022103.patch</filename>
            <type>text/plain</type>
            <size>3733</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MzcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZTVjNjI1MTczMDg5YzZm
MzVjNjE2N2UwMmY0YmZjMjQ4YmMxZGJjMC4uZGNkMTA3NTg1NzlmODllZTMzMWExN2U0YzJhOTg0
NjBlOWQzZWMxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA5LTA5ICBCeXVu
Z3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIFdL
RWluYVNoYXJlZFN0cmluZyBuZWVkcyBhIGZ1bmN0aW9uIHRvIGFkb3B0IGVpbmEgc3RyaW5nc2hh
cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjIw
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdLRWlu
YVNoYXJlZFN0cmluZyBuZWVkcyBhIHRvIGFkb3B0IGVpbmEgc3RyaW5nc2hhcmUgZGlyZWN0bHku
CisgICAgICAgIAorICAgICAgICBXaXRoIHRoaXMgYWRvcHQgZnVuY3Rpb24sIGFuIGluc3RhbmNl
IHRoYXQgaXMgZGlyZWN0bHkgY3JlYXRlZCB3aXRoCisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVf
YWRkKCkgY2FuIGJlIGVhc2lseSBoYW5kbGVkIGJ5IFdLRWluYVNoYXJlZFN0cmluZworICAgICAg
ICB3aXRob3V0IGNhbGxpbmcgZWluYV9zdHJpbmdzaGFyZV9kZWwoKSBmb3IgcHJldmVudGluZyBt
ZW1vcnkgbGVhay4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvY3BwL2VmbC9XS0VpbmFTaGFy
ZWRTdHJpbmcuY3BwOgorICAgICAgICAoV2ViS2l0OjphZG9wdEVpbmFTdHJpbmdTaGFyZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9jcHAvZWZsL1dLRWluYVNoYXJlZFN0cmluZy5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9laW5hX3NoYXJlZF9zdHJp
bmcuY3BwOgorICAgICAgICAoVEVTVF9GKToKKwogMjAxMi0wOC0zMSAgQnl1bmd3b28gTGVlICA8
Ync4MC5sZWVAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgQnVpbGQgd2FybmluZyA6IC1XZm9ybWF0
IG9uIFdlYk1lbW9yeVNhbXBsZXIuY3BwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9jcHAvZWZsL1dLRWluYVNoYXJlZFN0cmluZy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2NwcC9lZmwvV0tFaW5hU2hhcmVkU3RyaW5nLmNwcAppbmRleCBlYTQz
ZGYxNjdhZmQwNmUzMDZkMGMyN2Y2ZmNmOWZhMzFlMjEyOGI1Li5iMjI4YmY1MDViMTM2MDBmMmVj
MjA4MzJkNzYzODBhYTMyMjEzOTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2NwcC9lZmwvV0tFaW5hU2hhcmVkU3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2NwcC9lZmwvV0tFaW5hU2hhcmVkU3RyaW5nLmNwcApAQCAtMzMsNiAr
MzMsMTEgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAorV0tFaW5hU2hhcmVkU3RyaW5n
IFdlYktpdDo6YWRvcHRFaW5hU3RyaW5nU2hhcmUoY29uc3QgY2hhciogc3RyaW5nKQoreworICAg
IHJldHVybiBXS0VpbmFTaGFyZWRTdHJpbmcoc3RyaW5nLCB0cnVlKTsKK30KKwogdGVtcGxhdGUg
PHR5cGVuYW1lIFdLUmVmVHlwZT4KIEFMV0FZU19JTkxJTkUgY29uc3QgY2hhciogZnJvbVJlZlR5
cGUoV0tSZWZUeXBlIHN0clJlZiwgYm9vbCBhZG9wdCA9IGZhbHNlKQogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9jcHAvZWZsL1dLRWluYVNoYXJlZFN0cmluZy5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9jcHAvZWZsL1dLRWluYVNoYXJlZFN0cmlu
Zy5oCmluZGV4IDY4ZDc2ZjRlYWQxYmJjYmQ5ZTU0NWNlOWRjYzM1OTljMzMyNjZkOGIuLjMwN2Nm
MDMxMjNmNTQwNjEyYTZlM2Y4NzQ5NjhjZjBmOWQzZTYyYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvY3BwL2VmbC9XS0VpbmFTaGFyZWRTdHJpbmcuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2NwcC9lZmwvV0tFaW5hU2hhcmVkU3RyaW5nLmgK
QEAgLTYxLDEyICs2MSwyMCBAQCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBs
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZyA/IHN0YXRpY19jYXN0PHNpemVfdD4oZWlu
YV9zdHJpbmdzaGFyZV9zdHJsZW4obV9zdHJpbmcpKSA6IDA7IH0KIAorICAgIGZyaWVuZCBXS0Vp
bmFTaGFyZWRTdHJpbmcgYWRvcHRFaW5hU3RyaW5nU2hhcmUoY29uc3QgY2hhciogc3RyaW5nKTsK
KwogcHJpdmF0ZToKKyAgICAvLyBhZG9wdGluZyBjb25zdHJ1Y3RvcgorICAgIFdLRWluYVNoYXJl
ZFN0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcsIGJvb2wpIDogbV9zdHJpbmcoc3RyaW5nKSB7IH0K
KwogICAgIGNvbnN0IGNoYXIqIG1fc3RyaW5nOwogfTsKIAorV0tfRVhQT1JUIFdLRWluYVNoYXJl
ZFN0cmluZyBhZG9wdEVpbmFTdHJpbmdTaGFyZShjb25zdCBjaGFyKiBzdHJpbmcpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKIAogdXNpbmcgV2ViS2l0OjpXS0VpbmFTaGFyZWRTdHJpbmc7Cit1
c2luZyBXZWJLaXQ6OmFkb3B0RWluYVN0cmluZ1NoYXJlOwogCiAjZW5kaWYgLy8gV0tFaW5hU2hh
cmVkU3RyaW5nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L3Rlc3RzL3Rlc3RfZXdrMl9laW5hX3NoYXJlZF9zdHJpbmcuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2VpbmFfc2hhcmVkX3N0cmluZy5jcHAK
aW5kZXggN2Y2MmUwYjFlM2ZiNTBmYWQ4NzZmNWU4M2ZjMzBkZjVjZjY5ZmZiYy4uMzk1NDAzODQw
OGNlMTQyZWJhYTg0ODkxN2M1MzljM2FjM2Q1MjI0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2VpbmFfc2hhcmVkX3N0cmluZy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2sy
X2VpbmFfc2hhcmVkX3N0cmluZy5jcHAKQEAgLTc1LDYgKzc1LDE4IEBAIFRFU1RfRihFV0syVW5p
dFRlc3RCYXNlLCBjb25zdHJ1Y3RGcm9tV0tVUkwpCiAgICAgY2hlY2tTdHJpbmcoc3RyaW5nLCB0
ZXN0VXJsKTsKIH0KIAorVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGNvbnN0cnVjdEZyb21FaW5h
U3RyaW5nU2hhcmUpCit7CisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHN0cmluZyhhZG9wdEVpbmFT
dHJpbmdTaGFyZShlaW5hX3N0cmluZ3NoYXJlX2FkZCh0ZXN0U3RyaW5nKSkpOworICAgIGNoZWNr
U3RyaW5nKHN0cmluZywgdGVzdFN0cmluZyk7CisKKyAgICBzdHJpbmcgPSBhZG9wdEVpbmFTdHJp
bmdTaGFyZShlaW5hX3N0cmluZ3NoYXJlX2FkZChhbm90aGVyVGVzdFN0cmluZykpOworICAgIGNo
ZWNrU3RyaW5nKHN0cmluZywgYW5vdGhlclRlc3RTdHJpbmcpOworCisgICAgc3RyaW5nID0gc3Ry
aW5nOworICAgIGNoZWNrU3RyaW5nKHN0cmluZywgYW5vdGhlclRlc3RTdHJpbmcpOworfQorCiBU
RVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgY29zdHJ1Y3RDb3B5KQogewogICAgIFdLRWluYVNoYXJl
ZFN0cmluZyBzdHJpbmcodGVzdFN0cmluZyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163110</attachid>
            <date>2012-09-10 06:17:15 -0700</date>
            <delta_ts>2012-09-11 02:36:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96201-20120910221649.patch</filename>
            <type>text/plain</type>
            <size>3514</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNGMxNDhmZjEzM2MzZWZl
MThkZDdjZDA4ZGE2ZTE3M2MzNzc1NTYyNi4uNjI3NDhhNTA4NmJmMDk2YjkwMzlkZWE2MzdjYTBi
OWMyZWRjMzJmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA5LTEwICBCeXVu
Z3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIFdL
RWluYVNoYXJlZFN0cmluZyBuZWVkcyBhIGZ1bmN0aW9uIHRvIGFkb3B0IGVpbmEgc3RyaW5nc2hh
cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjIw
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdLRWlu
YVNoYXJlZFN0cmluZyBuZWVkcyBhIHRvIGFkb3B0IGVpbmEgc3RyaW5nc2hhcmUgZGlyZWN0bHku
CisKKyAgICAgICAgV2l0aCB0aGlzIGFkb3B0IGZ1bmN0aW9uLCBhbiBpbnN0YW5jZSB0aGF0IGlz
IGRpcmVjdGx5IGNyZWF0ZWQgd2l0aAorICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2FkZCgpIGNh
biBiZSBlYXNpbHkgaGFuZGxlZCBieSBXS0VpbmFTaGFyZWRTdHJpbmcKKyAgICAgICAgd2l0aG91
dCBjYWxsaW5nIGVpbmFfc3RyaW5nc2hhcmVfZGVsKCkgZm9yIHByZXZlbnRpbmcgbWVtb3J5IGxl
YWsuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2NwcC9lZmwvV0tFaW5hU2hhcmVkU3RyaW5n
LmNwcDoKKyAgICAgICAgKFdLRWluYVNoYXJlZFN0cmluZzo6YWRvcHQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvY3BwL2VmbC9XS0VpbmFTaGFyZWRTdHJpbmcuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZWluYV9zaGFyZWRfc3RyaW5nLmNwcDoKKyAg
ICAgICAgKFRFU1RfRik6CisKIDIwMTItMDktMDkgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJlbmFtZSBOb2RlOjpnZXRSZWN0L2dldFBpeGVsU25hcHBlZFJl
Y3QgYW5kIHJlbW92ZSBDb250YWluZXJOb2RlOjpnZXRSZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2NwcC9lZmwvV0tFaW5hU2hhcmVkU3RyaW5nLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvY3BwL2VmbC9XS0VpbmFTaGFyZWRTdHJpbmcuY3Bw
CmluZGV4IGVhNDNkZjE2N2FmZDA2ZTMwNmQwYzI3ZjZmY2Y5ZmEzMWUyMTI4YjUuLmQzMWJmZDQw
ZTAyOWNjMDQ1MjM2NzQ2Njc1ZTcyMjA0NDlhOGI2OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvY3BwL2VmbC9XS0VpbmFTaGFyZWRTdHJpbmcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvY3BwL2VmbC9XS0VpbmFTaGFyZWRTdHJpbmcuY3Bw
CkBAIC0xMDUsMyArMTA1LDEwIEBAIGJvb2wgV0tFaW5hU2hhcmVkU3RyaW5nOjpvcGVyYXRvcj09
KGNvbnN0IGNoYXIqIHN0cikgY29uc3QKIHsKICAgICByZXR1cm4gKCFzdHIgfHwgIW1fc3RyaW5n
KSA/IChzdHIgPT0gbV9zdHJpbmcpIDogIXN0cmNtcChtX3N0cmluZywgc3RyKTsKIH0KKworV0tF
aW5hU2hhcmVkU3RyaW5nIFdLRWluYVNoYXJlZFN0cmluZzo6YWRvcHQoRWluYV9TdHJpbmdzaGFy
ZSogc3RyaW5nKQoreworICAgIFdLRWluYVNoYXJlZFN0cmluZyBzaGFyZWRTdHJpbmc7CisgICAg
c2hhcmVkU3RyaW5nLm1fc3RyaW5nID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZyk7
CisgICAgcmV0dXJuIHNoYXJlZFN0cmluZzsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvY3BwL2VmbC9XS0VpbmFTaGFyZWRTdHJpbmcuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvY3BwL2VmbC9XS0VpbmFTaGFyZWRTdHJpbmcuaAppbmRleCA2OGQ3
NmY0ZWFkMWJiY2JkOWU1NDVjZTlkY2MzNTk5YzMzMjY2ZDhiLi41MmNmZmZhMGVjZWUyOGUwYTU4
NjE4ZGVhNjljZWExYTE2OWVmNmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2NwcC9lZmwvV0tFaW5hU2hhcmVkU3RyaW5nLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9jcHAvZWZsL1dLRWluYVNoYXJlZFN0cmluZy5oCkBAIC02MSw2ICs2MSw4
IEBAIHB1YmxpYzoKIAogICAgIEFMV0FZU19JTkxJTkUgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RyaW5nID8gc3RhdGljX2Nhc3Q8c2l6ZV90PihlaW5hX3N0cmluZ3NoYXJlX3N0
cmxlbihtX3N0cmluZykpIDogMDsgfQogCisgICAgc3RhdGljIFdLRWluYVNoYXJlZFN0cmluZyBh
ZG9wdChFaW5hX1N0cmluZ3NoYXJlKik7CisKIHByaXZhdGU6CiAgICAgY29uc3QgY2hhciogbV9z
dHJpbmc7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
dGVzdHMvdGVzdF9ld2syX2VpbmFfc2hhcmVkX3N0cmluZy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZWluYV9zaGFyZWRfc3RyaW5nLmNwcApp
bmRleCA3ZjYyZTBiMWUzZmI1MGZhZDg3NmY1ZTgzZmMzMGRmNWNmNjlmZmJjLi5jODIwMjM5YTUx
YTI0OGU3NzM0NjY0MjY1MWRlMjgyZTc4YWM2NGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZWluYV9zaGFyZWRfc3RyaW5nLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJf
ZWluYV9zaGFyZWRfc3RyaW5nLmNwcApAQCAtNzUsNiArNzUsMTggQEAgVEVTVF9GKEVXSzJVbml0
VGVzdEJhc2UsIGNvbnN0cnVjdEZyb21XS1VSTCkKICAgICBjaGVja1N0cmluZyhzdHJpbmcsIHRl
c3RVcmwpOwogfQogCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgY29uc3RydWN0RnJvbUVpbmFT
dHJpbmdTaGFyZSkKK3sKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc3RyaW5nKFdLRWluYVNoYXJl
ZFN0cmluZzo6YWRvcHQoZWluYV9zdHJpbmdzaGFyZV9hZGQodGVzdFN0cmluZykpKTsKKyAgICBj
aGVja1N0cmluZyhzdHJpbmcsIHRlc3RTdHJpbmcpOworCisgICAgc3RyaW5nID0gV0tFaW5hU2hh
cmVkU3RyaW5nOjphZG9wdChlaW5hX3N0cmluZ3NoYXJlX2FkZChhbm90aGVyVGVzdFN0cmluZykp
OworICAgIGNoZWNrU3RyaW5nKHN0cmluZywgYW5vdGhlclRlc3RTdHJpbmcpOworCisgICAgc3Ry
aW5nID0gc3RyaW5nOworICAgIGNoZWNrU3RyaW5nKHN0cmluZywgYW5vdGhlclRlc3RTdHJpbmcp
OworfQorCiBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgY29zdHJ1Y3RDb3B5KQogewogICAgIFdL
RWluYVNoYXJlZFN0cmluZyBzdHJpbmcodGVzdFN0cmluZyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163299</attachid>
            <date>2012-09-11 01:29:05 -0700</date>
            <delta_ts>2012-09-11 02:29:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96201-20120911172838.patch</filename>
            <type>text/plain</type>
            <size>3582</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNGMxNDhmZjEzM2MzZWZl
MThkZDdjZDA4ZGE2ZTE3M2MzNzc1NTYyNi4uZTQwNmY4ZWE4NTAwNWVjNDdmOWFlMmVmYzk5NmNl
MzE2ZGVmNWFiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA5LTEwICBCeXVu
Z3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIFdL
RWluYVNoYXJlZFN0cmluZyBuZWVkcyBhIGZ1bmN0aW9uIHRvIGFkb3B0IGVpbmEgc3RyaW5nc2hh
cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjIw
MQorCisgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgorCisg
ICAgICAgIFdLRWluYVNoYXJlZFN0cmluZyBuZWVkcyBhIHRvIGFkb3B0IGVpbmEgc3RyaW5nc2hh
cmUgZGlyZWN0bHkuCisKKyAgICAgICAgV2l0aCB0aGlzIGFkb3B0IGZ1bmN0aW9uLCBhbiBpbnN0
YW5jZSB0aGF0IGlzIGRpcmVjdGx5IGNyZWF0ZWQgd2l0aAorICAgICAgICBlaW5hX3N0cmluZ3No
YXJlX2FkZCgpIGNhbiBiZSBlYXNpbHkgaGFuZGxlZCBieSBXS0VpbmFTaGFyZWRTdHJpbmcKKyAg
ICAgICAgd2l0aG91dCBjYWxsaW5nIGVpbmFfc3RyaW5nc2hhcmVfZGVsKCkgZm9yIHByZXZlbnRp
bmcgbWVtb3J5IGxlYWsuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2NwcC9lZmwvV0tFaW5h
U2hhcmVkU3RyaW5nLmNwcDoKKyAgICAgICAgKFdLRWluYVNoYXJlZFN0cmluZzo6YWRvcHQpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvY3BwL2VmbC9XS0VpbmFTaGFyZWRTdHJpbmcuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZWluYV9zaGFyZWRfc3Ry
aW5nLmNwcDoKKyAgICAgICAgKFRFU1RfRik6CisKIDIwMTItMDktMDkgIEVtaWwgQSBFa2x1bmQg
IDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbmFtZSBOb2RlOjpnZXRSZWN0L2dldFBp
eGVsU25hcHBlZFJlY3QgYW5kIHJlbW92ZSBDb250YWluZXJOb2RlOjpnZXRSZWN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2NwcC9lZmwvV0tFaW5hU2hhcmVkU3Ry
aW5nLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvY3BwL2VmbC9XS0VpbmFTaGFy
ZWRTdHJpbmcuY3BwCmluZGV4IGVhNDNkZjE2N2FmZDA2ZTMwNmQwYzI3ZjZmY2Y5ZmEzMWUyMTI4
YjUuLmUwM2ZhZjZjNTRjYmQ4NTY3NjQ2MjhhMTUwNjI1N2NmOTYzMWRkN2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvY3BwL2VmbC9XS0VpbmFTaGFyZWRTdHJpbmcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvY3BwL2VmbC9XS0VpbmFTaGFy
ZWRTdHJpbmcuY3BwCkBAIC0xMDUsMyArMTA1LDggQEAgYm9vbCBXS0VpbmFTaGFyZWRTdHJpbmc6
Om9wZXJhdG9yPT0oY29uc3QgY2hhciogc3RyKSBjb25zdAogewogICAgIHJldHVybiAoIXN0ciB8
fCAhbV9zdHJpbmcpID8gKHN0ciA9PSBtX3N0cmluZykgOiAhc3RyY21wKG1fc3RyaW5nLCBzdHIp
OwogfQorCitXS0VpbmFTaGFyZWRTdHJpbmcgV0tFaW5hU2hhcmVkU3RyaW5nOjphZG9wdChFaW5h
X1N0cmluZ3NoYXJlKiBzdHJpbmcpCit7CisgICAgcmV0dXJuIFdLRWluYVNoYXJlZFN0cmluZyhz
dHJpbmcsIHRydWUpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9jcHAvZWZsL1dLRWluYVNoYXJlZFN0cmluZy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9jcHAvZWZsL1dLRWluYVNoYXJlZFN0cmluZy5oCmluZGV4IDY4ZDc2ZjRlYWQxYmJjYmQ5
ZTU0NWNlOWRjYzM1OTljMzMyNjZkOGIuLjdlNzQ3Y2I4ODQ1NTQxNGRiMDAxZGZhYzM2ZWE5M2M3
MTE2ZTk5MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvY3BwL2Vm
bC9XS0VpbmFTaGFyZWRTdHJpbmcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2NwcC9lZmwvV0tFaW5hU2hhcmVkU3RyaW5nLmgKQEAgLTYxLDcgKzYxLDEyIEBAIHB1YmxpYzoK
IAogICAgIEFMV0FZU19JTkxJTkUgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
aW5nID8gc3RhdGljX2Nhc3Q8c2l6ZV90PihlaW5hX3N0cmluZ3NoYXJlX3N0cmxlbihtX3N0cmlu
ZykpIDogMDsgfQogCisgICAgc3RhdGljIFdLRWluYVNoYXJlZFN0cmluZyBhZG9wdChFaW5hX1N0
cmluZ3NoYXJlKik7CisKIHByaXZhdGU6CisgICAgLy8gQW9wdGluZyBjb25zdHJ1Y3RvcgorICAg
IFdLRWluYVNoYXJlZFN0cmluZyhFaW5hX1N0cmluZ3NoYXJlKiBzdHJpbmcsIGJvb2wpIDogbV9z
dHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZykpIHsgfQorCiAgICAgY29uc3Qg
Y2hhciogbV9zdHJpbmc7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZWluYV9zaGFyZWRfc3RyaW5nLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9laW5hX3NoYXJlZF9z
dHJpbmcuY3BwCmluZGV4IDdmNjJlMGIxZTNmYjUwZmFkODc2ZjVlODNmYzMwZGY1Y2Y2OWZmYmMu
LmM4MjAyMzlhNTFhMjQ4ZTc3MzQ2NjQyNjUxZGUyODJlNzhhYzY0ZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9laW5hX3NoYXJl
ZF9zdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3Rz
L3Rlc3RfZXdrMl9laW5hX3NoYXJlZF9zdHJpbmcuY3BwCkBAIC03NSw2ICs3NSwxOCBAQCBURVNU
X0YoRVdLMlVuaXRUZXN0QmFzZSwgY29uc3RydWN0RnJvbVdLVVJMKQogICAgIGNoZWNrU3RyaW5n
KHN0cmluZywgdGVzdFVybCk7CiB9CiAKK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBjb25zdHJ1
Y3RGcm9tRWluYVN0cmluZ1NoYXJlKQoreworICAgIFdLRWluYVNoYXJlZFN0cmluZyBzdHJpbmco
V0tFaW5hU2hhcmVkU3RyaW5nOjphZG9wdChlaW5hX3N0cmluZ3NoYXJlX2FkZCh0ZXN0U3RyaW5n
KSkpOworICAgIGNoZWNrU3RyaW5nKHN0cmluZywgdGVzdFN0cmluZyk7CisKKyAgICBzdHJpbmcg
PSBXS0VpbmFTaGFyZWRTdHJpbmc6OmFkb3B0KGVpbmFfc3RyaW5nc2hhcmVfYWRkKGFub3RoZXJU
ZXN0U3RyaW5nKSk7CisgICAgY2hlY2tTdHJpbmcoc3RyaW5nLCBhbm90aGVyVGVzdFN0cmluZyk7
CisKKyAgICBzdHJpbmcgPSBzdHJpbmc7CisgICAgY2hlY2tTdHJpbmcoc3RyaW5nLCBhbm90aGVy
VGVzdFN0cmluZyk7Cit9CisKIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBjb3N0cnVjdENvcHkp
CiB7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHN0cmluZyh0ZXN0U3RyaW5nKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>