This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [GSoC] Patches for shared_ptr array and polymorphic_allocator


On 18/07/15 23:29 -0700, Tim Shen wrote:
On Sat, Jul 18, 2015 at 3:01 PM, Fan You <youfan.noey@gmail.com> wrote:
However [8.8.6] said, If r is non-null, sets the value of the default memory
resource pointer to r, otherwise sets the default memory resource pointer to
new_delete_resource().

Ah right, so the only place we should care about is set_default_resource:
void
set_default_resource(memory_resource __r)
{
 std::atomic<memory_resource> __new_ptr = __r ? __r : new_delete_resource();
 return __new_ptr.exchange(memory_resource::_S_default_resource);
}

This won't compile, because std::atomic<T>::exchange takes T not a
std::atomic<T>.

We don't need __new_ptr to be atomic, the only thing that needs to be
atomic is the exchange operation on the global, so as I said in my
other reply a minute ago, I think it should be:

inline memory_resource*
set_default_resource(memory_resource* __r) noexcept
{
  if ( __r == nullptr)
    __r = new_delete_resource();
  return memory_resource::_S_default_resource.exchange(__r);
}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]