re PR libstdc++/65393 (std::thread shared_ptr inefficiency)

PR libstdc++/65393
	* src/c++11/thread.cc (thread::_M_make_thread): Replace shared_ptr
	copies with moves.

From-SVN: r224530
This commit is contained in:
Jonathan Wakely 2015-06-16 18:53:52 +01:00 committed by Jonathan Wakely
parent b2c15a7780
commit 0dc3cba1bd
2 changed files with 12 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2015-06-16 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/65393
* src/c++11/thread.cc (thread::_M_make_thread): Replace shared_ptr
copies with moves.
2015-06-12 Jonathan Wakely <jwakely@redhat.com>
* include/precompiled/stdc++.h: Include <codecvt> and <shared_mutex>.

View File

@ -92,7 +92,7 @@ namespace std _GLIBCXX_VISIBILITY(default)
std::terminate();
}
return 0;
return nullptr;
}
}
@ -137,18 +137,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__throw_system_error(int(errc::operation_not_permitted));
#endif
_M_start_thread(__b, nullptr);
_M_start_thread(std::move(__b), nullptr);
}
void
thread::_M_start_thread(__shared_base_type __b, void (*)())
{
__b->_M_this_ptr = __b;
auto ptr = __b.get();
ptr->_M_this_ptr = std::move(__b);
int __e = __gthread_create(&_M_id._M_thread,
&execute_native_thread_routine, __b.get());
&execute_native_thread_routine, ptr);
if (__e)
{
__b->_M_this_ptr.reset();
ptr->_M_this_ptr.reset();
__throw_system_error(__e);
}
}