Very nice article, explains the issue simple and clear. Thanks a lot.

12 март 2012, понеделник 18:22:21 UTC+2, Shezan Baig написа:
>
> the 'double align' and union are intended to make sure the 'unlocker' 
> buffer is aligned (at least to an 8-byte boundary).
> it should be good enough for most platforms.
> more info here: 
> https://www.securecoding.cert.org/confluence/display/cplusplus/MEM45-CPP.+Provide+properly+aligned+pointers+to+placement+new
>
>
> 2012/3/12 avasilev <[email protected]>
>
>>  Yes, using the placement new operator was my initial idea. But as far as 
>> I investigated this technique, it is not very safe, because of alignment 
>> issues. I am curious about the role of the 'double align' member and the 
>> union. Is this to prevent a zero-sized array in case sizeof(Unlocker) == 0 ?
>> Thanks
>> Alex
>> 12 март 2012, понеделник 16:20:15 UTC+2, Shezan Baig написа:
>>
>>> you could conditionally construct it like:
>>>
>>> class ConditionalUnlocker {
>>>     typedef v8::Unlocker RealUnlocker;
>>>
>>>     union {
>>>         char unlocker[sizeof(RealUnlocker)]**;
>>>         double align;
>>>     };
>>>     bool istrue;
>>>
>>>   public:
>>>      ConditionalUnlocker(bool condition)
>>>      : istrue(condition)
>>>      {
>>>          if (istrue) {
>>>              new (unlocker) RealUnlocker();  // construct it within the 
>>> stack-allocated 'unlocker'
>>>          }
>>>      }
>>>
>>>      ~ConditonalUnlocker()
>>>      {
>>>          if (istrue) {
>>>               RealUnlocker& real = *(RealUnlocker*)unlocker;
>>>               real.~RealUnlocker();   // destruct it
>>>          }
>>>      }
>>> };
>>>
>>>
>>> (no guarantees being made about the portability of this class etc)
>>>
>>>
>>>
>>> 2012/3/12 avasilev <[email protected]>
>>>
>>>> Hi Stephan,
>>>> Thanks
>>>> Unfortunately this will do the job only if the flag is known at compile 
>>>> time. What I need is to be able to switch this at runtime.
>>>> Thanks for the response.
>>>> Best regards
>>>> Alex
>>>>
>>>> 12 март 2012, понеделник 14:25:56 UTC+2, Stephan Beal написа:
>>>>
>>>>> On Mon, Mar 12, 2012 at 12:37 PM, avasilev <[email protected]>wrote:
>>>>>
>>>>>> Unlocker classes? My use case is a conditional auto-unlocker object,
>>>>>> that may or may not unlock v8, depending on a global setting, so I
>>>>>>
>>>>>
>>>>> Here's a template which does that:
>>>>>
>>>>>     /**
>>>>>         A sentry class which instantiates a v8::Unlocker
>>>>>         if the boolean value is true or is a no-op if it is false.
>>>>>     */
>>>>>     template <bool> struct V8Unlocker {};
>>>>>     
>>>>>     /**
>>>>>         Equivalent to v8::Unlocker.
>>>>>     */
>>>>>     template <>
>>>>>     struct V8Unlocker<true> : v8::Unlocker
>>>>>     {
>>>>>     };
>>>>>
>>>>> -- 
>>>>> ----- stephan beal
>>>>> http://wanderinghorse.net/**home**/stephan/<http://wanderinghorse.net/home/stephan/>
>>>>> http://gplus.to/sgbeal
>>>>>
>>>>>
>>>> 12 март 2012, понеделник 14:25:56 UTC+2, Stephan Beal написа:
>>>>
>>>>> On Mon, Mar 12, 2012 at 12:37 PM, avasilev <[email protected]>wrote:
>>>>>
>>>>>> Unlocker classes? My use case is a conditional auto-unlocker object,
>>>>>> that may or may not unlock v8, depending on a global setting, so I
>>>>>>
>>>>>
>>>>> Here's a template which does that:
>>>>>
>>>>>     /**
>>>>>         A sentry class which instantiates a v8::Unlocker
>>>>>         if the boolean value is true or is a no-op if it is false.
>>>>>     */
>>>>>     template <bool> struct V8Unlocker {};
>>>>>     
>>>>>     /**
>>>>>         Equivalent to v8::Unlocker.
>>>>>     */
>>>>>     template <>
>>>>>     struct V8Unlocker<true> : v8::Unlocker
>>>>>     {
>>>>>     };
>>>>>
>>>>> -- 
>>>>> ----- stephan beal
>>>>> http://wanderinghorse.net/**home**/stephan/<http://wanderinghorse.net/home/stephan/>
>>>>> http://gplus.to/sgbeal
>>>>>
>>>>>
>>>> 12 март 2012, понеделник 14:25:56 UTC+2, Stephan Beal написа:
>>>>
>>>>> On Mon, Mar 12, 2012 at 12:37 PM, avasilev <[email protected]>wrote:
>>>>>
>>>>>> Unlocker classes? My use case is a conditional auto-unlocker object,
>>>>>> that may or may not unlock v8, depending on a global setting, so I
>>>>>>
>>>>>
>>>>> Here's a template which does that:
>>>>>
>>>>>     /**
>>>>>         A sentry class which instantiates a v8::Unlocker
>>>>>         if the boolean value is true or is a no-op if it is false.
>>>>>     */
>>>>>     template <bool> struct V8Unlocker {};
>>>>>     
>>>>>     /**
>>>>>         Equivalent to v8::Unlocker.
>>>>>     */
>>>>>     template <>
>>>>>     struct V8Unlocker<true> : v8::Unlocker
>>>>>     {
>>>>>     };
>>>>>
>>>>> -- 
>>>>> ----- stephan beal
>>>>> http://wanderinghorse.net/**home**/stephan/<http://wanderinghorse.net/home/stephan/>
>>>>> http://gplus.to/sgbeal
>>>>>
>>>>>
>>>> 12 март 2012, понеделник 14:25:56 UTC+2, Stephan Beal написа:
>>>>
>>>>> On Mon, Mar 12, 2012 at 12:37 PM, avasilev <[email protected]>wrote:
>>>>>
>>>>>> Unlocker classes? My use case is a conditional auto-unlocker object,
>>>>>> that may or may not unlock v8, depending on a global setting, so I
>>>>>>
>>>>>
>>>>> Here's a template which does that:
>>>>>
>>>>>     /**
>>>>>         A sentry class which instantiates a v8::Unlocker
>>>>>         if the boolean value is true or is a no-op if it is false.
>>>>>     */
>>>>>     template <bool> struct V8Unlocker {};
>>>>>     
>>>>>     /**
>>>>>         Equivalent to v8::Unlocker.
>>>>>     */
>>>>>     template <>
>>>>>     struct V8Unlocker<true> : v8::Unlocker
>>>>>     {
>>>>>     };
>>>>>
>>>>> -- 
>>>>> ----- stephan beal
>>>>> http://wanderinghorse.net/**home**/stephan/<http://wanderinghorse.net/home/stephan/>
>>>>> http://gplus.to/sgbeal
>>>>>
>>>>>
>>>> 12 март 2012, понеделник 14:25:56 UTC+2, Stephan Beal написа:
>>>>
>>>>> On Mon, Mar 12, 2012 at 12:37 PM, avasilev <[email protected]>wrote:
>>>>>
>>>>>> Unlocker classes? My use case is a conditional auto-unlocker object,
>>>>>> that may or may not unlock v8, depending on a global setting, so I
>>>>>>
>>>>>
>>>>> Here's a template which does that:
>>>>>
>>>>>     /**
>>>>>         A sentry class which instantiates a v8::Unlocker
>>>>>         if the boolean value is true or is a no-op if it is false.
>>>>>     */
>>>>>     template <bool> struct V8Unlocker {};
>>>>>     
>>>>>     /**
>>>>>         Equivalent to v8::Unlocker.
>>>>>     */
>>>>>     template <>
>>>>>     struct V8Unlocker<true> : v8::Unlocker
>>>>>     {
>>>>>     };
>>>>>
>>>>> -- 
>>>>> ----- stephan beal
>>>>> http://wanderinghorse.net/**home**/stephan/<http://wanderinghorse.net/home/stephan/>
>>>>> http://gplus.to/sgbeal
>>>>>
>>>>>  -- 
>>>> v8-users mailing list
>>>> [email protected]
>>>> http://groups.google.com/**group/v8-users<http://groups.google.com/group/v8-users>
>>>>
>>>
>>>  -- 
>> v8-users mailing list
>> [email protected]
>> http://groups.google.com/group/v8-users
>>
>
>

-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users

Reply via email to