gcc/libstdc++-v3/testsuite/20_util/synchronized_pool_resource
Jonathan Wakely ec40967f13 libstdc++: Make pmr::synchronized_pool_resource work without libpthread (PR 94936)
I implicitly assumed that programs using pmr::synchronized_pool_resource
would also be using multiple threads, and so the weak symbols in
gthr-posix.h would be resolved by linking to libpthread. If that isn't
true then it crashes when trying to use pthread_key_create.

This commit makes the pool resource check __gthread_active_p() before
using thread-specific data, and just use a single set of memory pools
when there's only a single thread.

	PR libstdc++/94936
	* src/c++17/memory_resource.cc (synchronized_pool_resource::_TPools):
	Add comment about single-threaded behaviour.
	(synchronized_pool_resource::_TPools::move_nonempty_chunks()): Hoist
	class member access out of loop.
	(synchronized_pool_resource::synchronized_pool_resource())
	(synchronized_pool_resource::~synchronized_pool_resource())
	(synchronized_pool_resource::release()): Check __gthread_active_p
	before creating and/or deleting the thread-specific data key.
	(synchronized_pool_resource::_M_thread_specific_pools()): Adjust
	assertions.
	(synchronized_pool_resource::do_allocate(size_t, size_t)): Add fast
	path for single-threaded case.
	(synchronized_pool_resource::do_deallocate(void*, size_t, size_t)):
	Likewise. Return if unable to find a pool that owns the allocation.
	* testsuite/20_util/synchronized_pool_resource/allocate_single.cc:
	New test.
	* testsuite/20_util/synchronized_pool_resource/cons_single.cc: New
	test.
	* testsuite/20_util/synchronized_pool_resource/release_single.cc: New
	test.
2020-05-04 13:37:31 +01:00
..
allocate.cc Update copyright years. 2020-01-01 12:51:42 +01:00
allocate_single.cc libstdc++: Make pmr::synchronized_pool_resource work without libpthread (PR 94936) 2020-05-04 13:37:31 +01:00
cons.cc Update copyright years. 2020-01-01 12:51:42 +01:00
cons_single.cc libstdc++: Make pmr::synchronized_pool_resource work without libpthread (PR 94936) 2020-05-04 13:37:31 +01:00
is_equal.cc Update copyright years. 2020-01-01 12:51:42 +01:00
multithreaded.cc Update copyright years. 2020-01-01 12:51:42 +01:00
options.cc Update copyright years. 2020-01-01 12:51:42 +01:00
release.cc Update copyright years. 2020-01-01 12:51:42 +01:00
release_single.cc libstdc++: Make pmr::synchronized_pool_resource work without libpthread (PR 94936) 2020-05-04 13:37:31 +01:00