gcc/libstdc++-v3/include/ext/mt_allocator.h

757 lines
22 KiB
C
Raw Normal View History

// MT-optimized allocator -*- C++ -*-
user.cfg.in: Tweaks. 2009-02-20 Benjamin Kosnik <bkoz@redhat.com> * doc/doxygen/user.cfg.in: Tweaks. * doc/doxygen/doxygroups.cc: Prefer markup that can be elsewhere, be elsewhere. * include/tr1_impl/unordered_map: Just use most specialized container module. * include/tr1_impl/unordered_set: Same. * include/tr1_impl/array: Same. * include/bits/stl_list.h: Same. * include/bits/stl_map.h: Same. * include/bits/stl_queue.h: Same. * include/bits/stl_set.h: Same. * include/bits/stl_stack.h: Same. * include/bits/forward_list.h: Same. * include/bits/basic_string.h: Same. * include/bits/stl_multimap.h: Same. * include/bits/stl_vector.h: Same. * include/bits/stl_deque.h: Same. * include/bits/stl_multiset.h: Same. * include/bits/stl_bvector.h: Same. * include/backward/binders.h: Change binder module to binders. * include/std/complex: Add complex_numers module. * include/tr1_impl/complex: Same. * include/std/valarray: Add numeric_arrays module. * include/bits/gslice_array.h: Same. * include/bits/gslice.h: Same. * include/bits/mask_array.h: Same. * include/bits/slice_array.h: Same. * include/bits/indirect_array.h: Same. * include/bits/allocator.h: Add allocators module. * include/ext/throw_allocator.h * include/ext/pool_allocator.h * include/ext/bitmap_allocator.h * include/ext/new_allocator.h * include/ext/malloc_allocator.h * include/ext/array_allocator.h * include/ext/mt_allocator.h * include/ext/debug_allocator.h * include/ext/extptr_allocator.h * include/tr1_impl/functional: Move namespace markup here. * include/tr1_impl/regex: Same. * include/tr1_impl/type_traits: Add metaprogramming module. * include/std/type_traits: Same. * include/std/memory: Add memory module. * include/std/ratio: Add ratio module. * include/std/chrono: Move namespace markup here, add time module. * include/std/thread: Move namespace markup here, add concurrency module. * include/std/mutex: Use concurrency module. * include/std/condition_variable: Same. * include/bits/ios_base.h: Refine io module. * include/bits/basic_ios.h: Same. * include/std/fstream: Same. * include/std/istream: Same. * include/std/ostream: Same. * include/std/sstream: Same. * include/ext/vstring.h: Correct parameter markup. * include/bits/shared_ptr.h: Add pointer_abstractions module. * include/bits/unique_ptr.h: Same. * include/bits/algorithmfwd.h: Add mutating_algorithms, non_mutating_algorithms, sorting_algorithms. Adjust nesting. * include/bits/stl_heap.h: Add markup for new groupings. * include/bits/stl_algobase.h: Same. * include/bits/stl_algo.h: Same. * include/c_compatibility/stdatomic.h: Add atomics module. * include/c_global/cstdatomic: Same. * libsupc++/exception: Add exceptions module. * libsupc++/typeinfo: Same. * libsupc++/new: Same. * libsupc++/exception_ptr.h: Same. * include/std/system_error: Same. * include/std/stdexcept: Same. * libsupc++/cxxabi.h: Move doxygroups.cc markup here. * libsupc++/cxxabi-forced.h: Same. * testsuite/27_io/ios_base/cons/assign_neg.cc: Fix up line numbers. * testsuite/27_io/ios_base/cons/copy_neg.cc: Same. * testsuite/30_threads/condition_variable_any/cons/assign_neg.cc: Same. * testsuite/30_threads/condition_variable_any/cons/copy_neg.cc: Same. * testsuite/30_threads/mutex/cons/assign_neg.cc: Same. * testsuite/30_threads/mutex/cons/copy_neg.cc: Same. * testsuite/30_threads/timed_mutex/cons/assign_neg.cc: Same. * testsuite/30_threads/timed_mutex/cons/copy_neg.cc: Same. * testsuite/30_threads/thread/cons/assign_neg.cc: Same. * testsuite/30_threads/thread/cons/copy_neg.cc: Same. * testsuite/30_threads/recursive_mutex/cons/assign_neg.cc: Same. * testsuite/30_threads/recursive_mutex/cons/copy_neg.cc: Same. * testsuite/30_threads/condition_variable/cons/assign_neg.cc: Same. * testsuite/30_threads/condition_variable/cons/copy_neg.cc: Same. * testsuite/30_threads/recursive_timed_mutex/cons/assign_neg.cc: Same. * testsuite/30_threads/recursive_timed_mutex/cons/copy_neg.cc: Same. * testsuite/29_atomics/atomic/cons/assign_neg.cc: Same. * testsuite/29_atomics/atomic/cons/copy_neg.cc: Same. * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: Same. * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: Same. * testsuite/23_containers/vector/requirements/dr438/ constructor_1_neg.cc: Same. * testsuite/23_containers/vector/requirements/dr438/ constructor_2_neg.cc: Same. * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: Same. * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: Same. * testsuite/23_containers/deque/requirements/dr438/ constructor_1_neg.cc: Same. * testsuite/23_containers/deque/requirements/dr438/ constructor_2_neg.cc: Same. * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: Same. * testsuite/23_containers/list/requirements/dr438/insert_neg.cc: Same. * testsuite/23_containers/list/requirements/dr438/ constructor_1_neg.cc: Same. * testsuite/23_containers/list/requirements/dr438/ constructor_2_neg.cc: Same. * testsuite/20_util/duration/cons/1_neg.cc: Same. * testsuite/20_util/duration/requirements/typedefs_neg1.cc: Same. * testsuite/20_util/duration/requirements/typedefs_neg2.cc: Same. * testsuite/20_util/duration/requirements/typedefs_neg3.cc: Same. * testsuite/20_util/unique_ptr/modifiers/reset_neg.cc: Same. * testsuite/20_util/unique_ptr/assign/assign.cc: Same. * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Same. * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: Same. * testsuite/20_util/ratio/cons/cons_overflow.cc: Same. * testsuite/20_util/ratio/operations/ops_overflow.cc: Same. From-SVN: r144343
2009-02-21 00:45:21 +00:00
// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
// this file and link it with other files to produce an executable, this
// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License. This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
/** @file ext/mt_allocator.h
* This file is a GNU extension to the Standard C++ Library.
*/
#ifndef _MT_ALLOCATOR_H
#define _MT_ALLOCATOR_H 1
#include <new>
#include <cstdlib>
#include <bits/functexcept.h>
atomicity.h: Move to... 2006-09-13 Benjamin Kosnik <bkoz@redhat.com> * include/bits/atomicity.h: Move to... * include/ext/atomicity.h: ...here. * include/bits/concurrence.h: Move to... * include/ext/concurrence.h: ...here. * include/Makefile.am (ext_headers): Additions. (bits_headers): Subtractions. * include/Makefile.in: Regenerate. * include/ext/bitmap_allocator.h (_Mutex), __threads_enabled, _Lock, _Auto_Lock): Subsume into... * include/bits/concurrence.h (__mutex): ..this. Error check locking and unlocking. (lock): Uglify to... (__scoped_lock): Use __mutex. (__glibcxx_mutex_define_initialized): Remove. (__glibcxx_mutex_type): Remove. * include/tr1/boost_shared_ptr.h: Formating tweaks, adjustments. (_Lock_policy): Move from here... * include/ext/concurrence.h: ... to here. (__shared_ptr_default_lock_mode): To __default_lock_policy. (_S_lockfree): To _S_atomic. Document. * libsupc++/guard.cc (static_mutex): Subsume into and fixup for... * include/ext/concurrence.h (__recursive_mutex): ...this. Error check locking and unlocking. * libsupc++/eh_alloc.cc: Use __scoped_lock. * config/os/aix/atomicity.h: Fixups for include paths, mutex to __scoped_mutex change, removal of locking defines. * config/os/irix/atomicity.h: Same. * config/cpu/cris/atomicity.h: Same. * config/cpu/m68k/atomicity.h: Same. * config/cpu/hppa/atomicity.h: Same. * config/cpu/mips/atomicity.h: Same. * config/cpu/sparc/atomicity.h: Same. * config/cpu/i386/atomicity.h: Same. * config/cpu/i486/atomicity.h: Same. * config/cpu/sh/atomicity.h: Same. * config/cpu/generic/atomicity_mutex/atomicity.h: Same. * include/ext/pool_allocator.h: Same. * include/ext/bitmap_allocator.h: Same. * include/ext/rc_string_base.h: Same. * include/ext/mt_allocator.h: Same. * include/bits/locale_classes.h: Same. * include/bits/basic_string.h: Same. * include/bits/ios_base.h: Same. * include/tr1/memory: Same. * src/pool_allocator.cc: Same. * src/mt_allocator.cc: Same. * src/locale_init.cc: Same. * src/ios.cc: Same. * src/locale.cc: Same. * src/bitmap_allocator.cc: Same. * src/ios_init.cc: Same. * src/debug.cc: Same. From-SVN: r116942
2006-09-14 09:48:15 +00:00
#include <ext/atomicity.h>
#include <bits/move.h>
c++config: Add in revised namespace associations. 2005-12-18 Benjamin Kosnik <bkoz@redhat.com> * include/bits/c++config: Add in revised namespace associations. _GLIBCXX_BEGIN_NAMESPACE: New macro. _GLIBCXX_END_NAMESPACE: Same. _GLIBCXX_BEGIN_NESTED_NAMESPACE: Same. _GLIBCXX_END_NESTED_NAMESPACE: Same. * acinclude.m4 (GLIBCXX_ENABLE_SYMVERS]): Add gnu-versioned-namespace. * configure: Regenerated. * config.h.in: Same. * config/abi/pre/gnu-versioned-namespace.ver: New. * config/abi/pre/gnu.ver (GLIBCXX_3.4.7): Add exports for nested debug mode items. * include/Makefile.am (${host_builddir}/c++config.h): Fill in values for __GLIBCXX__ and _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION. * include/Makefile.in: Regnerate. * src/compatibility.cc: Alias new, nested definitions to exported symbols from non-nested __gnu_debug. * src/Makefile.am: Add in ENABLE_SYMVERS_GNU_NAMESPACE. * src/Makefile.in: Regenerate. * docs/html/debug_mode.html: Revise for nested design. * docs/html/debug.html: Use debug qualifications instead of __gnu_debug. * docs/html/configopts.html: Revise documentation for --enable-symvers. * include/debug/formatter: Simplify namespace qualifications for current, nested-only reality. Add top-level namespace alias, namespace debug, for debug-mode containers. * include/debug/safe_iterator.h: Same. * include/debug/set.h: Same. * include/debug/hash_multimap.h: Same. * include/debug/hash_set.h: Same. * include/debug/bitset * include/debug/safe_sequence.h: Same. * include/debug/multiset.h: Same. * include/debug/safe_base.h: Same. * include/debug/functions.h: Same. * include/debug/safe_iterator.tcc * include/debug/hash_multiset.h: Same. * include/debug/vector * include/debug/map.h: Same. * include/debug/deque * include/debug/hash_map.h: Same. * include/debug/string * include/debug/macros.h: Same. * include/debug/list * include/debug/debug.h: Same. * include/debug/multimap.h: Same. * src/debug.cc: Same. * testsuite/23_containers/vector/invalidation/1.cc: Cleanups. * testsuite/23_containers/vector/invalidation/2.cc: Same. * testsuite/23_containers/vector/invalidation/3.cc: Same. * testsuite/23_containers/vector/invalidation/4.cc: Same. * testsuite/23_containers/deque/invalidation/1.cc: Same. * testsuite/23_containers/deque/invalidation/2.cc: Same. * testsuite/23_containers/deque/invalidation/3.cc: Same. * testsuite/23_containers/deque/invalidation/4.cc: Same. * testsuite/23_containers/multiset/invalidation/1.cc: Same. * testsuite/23_containers/multiset/invalidation/2.cc: Same. * testsuite/23_containers/multimap/invalidation/1.cc: Same. * testsuite/23_containers/multimap/invalidation/2.cc: Same. * testsuite/23_containers/bitset/invalidation/1.cc: Same. * testsuite/23_containers/bitset/cons/16020.cc: Same. * testsuite/23_containers/bitset/operations/13838.cc: Same. * testsuite/23_containers/list/invalidation/1.cc: Same. * testsuite/23_containers/list/invalidation/2.cc: Same. * testsuite/23_containers/list/invalidation/3.cc: Same. * testsuite/23_containers/list/invalidation/4.cc: Same. * testsuite/23_containers/set/invalidation/1.cc: Same. * testsuite/23_containers/set/invalidation/2.cc: Same. * testsuite/23_containers/map/invalidation/1.cc: Same. * testsuite/23_containers/map/invalidation/2.cc: Same. * testsuite/23_containers/map/insert/16813.cc: Same. * include/bits/basic_ios.h: Use _GLIBCXX_BEGIN_NAMESPACE(std) and friends. * include/bits/stl_list.h: Same. * include/bits/stl_map.h: Same. * include/bits/stl_algobase.h: Same. * include/bits/localefwd.h: Same. * include/bits/valarray_array.tcc: Same. * include/bits/valarray_after.h: Same. * include/bits/gslice_array.h: Same. * include/bits/stl_queue.h: Same. * include/bits/gslice.h: Same. * include/bits/locale_facets.tcc: Same. * include/bits/locale_classes.h: Same. * include/bits/stl_set.h: Same. * include/bits/locale_facets.h: Same. * include/bits/stl_stack.h: Same. * include/bits/stl_iterator_base_types.h: Same. * include/bits/stl_heap.h: Same. * include/bits/indirect_array.h: Same. * include/bits/atomicity.h: Same. * include/bits/stream_iterator.h: Same. * include/bits/concurrence.h: Same. * include/bits/basic_string.h: Same. * include/bits/stl_multimap.h: Same. * include/bits/stl_pair.h: Same. * include/bits/basic_ios.tcc: Same. * include/bits/stl_raw_storage_iter.h: Same. * include/bits/stl_vector.h: Same. * include/bits/stl_numeric.h: Same. * include/bits/ios_base.h: Same. * include/bits/stl_deque.h: Same. * include/bits/istream.tcc: Same. * include/bits/postypes.h: Same. * include/bits/stl_multiset.h: Same. * include/bits/mask_array.h: Same. * include/bits/stl_uninitialized.h: Same. * include/bits/ostream.tcc: Same. * include/bits/slice_array.h: Same. * include/bits/boost_concept_check.h: Same. * include/bits/sstream.tcc: Same. * include/bits/stl_iterator_base_funcs.h: Same. * include/bits/char_traits.h: Same. * include/bits/stl_algo.h: Same. * include/bits/stringfwd.h: Same. * include/bits/c++config * include/bits/stl_iterator.h: Same. * include/bits/valarray_array.h: Same. * include/bits/stl_tempbuf.h: Same. * include/bits/vector.tcc: Same. * include/bits/deque.tcc: Same. * include/bits/stl_bvector.h: Same. * include/bits/basic_string.tcc: Same. * include/bits/list.tcc: Same. * include/bits/streambuf_iterator.h: Same. * include/bits/valarray_before.h: Same. * include/bits/stl_construct.h: Same. * include/bits/stl_function.h: Same. * include/bits/cpp_type_traits.h: Same. * include/bits/streambuf.tcc: Same. * include/bits/allocator.h: Same. * include/bits/stl_tree.h: Same. * include/bits/fstream.tcc: Same. * include/bits/stl_relops.h: Same. * include/bits/functexcept.h: Same. * include/std/std_valarray.h: Same. * include/std/std_iostream.h: Same. * include/std/std_streambuf.h: Same. * include/std/std_bitset.h: Same. * include/std/std_iosfwd.h: Same. * include/std/std_iomanip.h: Same. * include/std/std_fstream.h: Same. * include/std/std_limits.h: Same. * include/std/std_stdexcept.h: Same. * include/std/std_istream.h: Same. * include/std/std_complex.h: Same. * include/std/std_memory.h: Same. * include/std/std_ostream.h: Same. * include/std/std_sstream.h: Same. * include/c_std/std_csignal.h: Same. * include/c_std/std_cstdlib.h: Same. * include/c_std/std_cstdio.h: Same. * include/c_std/std_cstdarg.h: Same. * include/c_std/std_cctype.h: Same. * include/c_std/std_cmath.h: Same. * include/c_std/std_ctime.h: Same. * include/c_std/std_clocale.h: Same. * include/c_std/std_csetjmp.h: Same. * include/c_std/std_cwchar.h: Same. * include/c_std/std_cstring.h: Same. * include/c_std/std_cstddef.h: Same. * include/c_std/std_cwctype.h: Same. * include/backward/iterator.h: Same. * include/backward/set.h: Same. * include/backward/hashtable.h: Same. * include/backward/fstream.h: Same. * include/backward/tempbuf.h: Same. * include/backward/istream.h: Same. * include/backward/bvector.h: Same. * include/backward/stack.h: Same. * include/backward/rope.h: Same. * include/backward/complex.h: Same. * include/backward/ostream.h: Same. * include/backward/heap.h: Same. * include/backward/iostream.h: Same. * include/backward/function.h: Same. * include/backward/multimap.h: Same. * include/backward/pair.h: Same. * include/backward/stream.h: Same. * include/backward/iomanip.h: Same. * include/backward/strstream * include/backward/slist.h: Same. * include/backward/tree.h: Same. * include/backward/vector.h: Same. * include/backward/deque.h: Same. * include/backward/multiset.h: Same. * include/backward/list.h: Same. * include/backward/map.h: Same. * include/backward/algobase.h: Same. * include/backward/hash_map.h: Same. * include/backward/algo.h: Same. * include/backward/queue.h: Same. * include/backward/streambuf.h: Same. * src/allocator-inst.cc: Same. * src/complex_io.cc: Same. * src/localename.cc: Same. * src/limits.cc: Same. * src/ios_failure.cc: Same. * src/locale-misc-inst.cc: Same. * src/streambuf-inst.cc: Same. * src/misc-inst.cc: Same. * src/concept-inst.cc: Same. * src/ios_locale.cc: Same. * src/pool_allocator.cc: Same. * src/fstream-inst.cc: Same. * src/istream-inst.cc: Same. * src/string-inst.cc: Same. * src/locale_init.cc: Same. * src/ctype.cc: Same. * src/strstream.cc: Same. * src/ostream-inst.cc: Same. * src/functexcept.cc: Same. * src/streambuf.cc: Same. * src/sstream-inst.cc: Same. * src/ios.cc: Same. * src/valarray-inst.cc: Same. * src/locale.cc: Same. * src/tree.cc: Same. * src/stdexcept.cc: Same. * src/istream.cc: Same. * src/compatibility.cc: Same. * src/locale-inst.cc: Same. * src/globals_io.cc: Same. * src/list.cc: Same. * src/ios_init.cc: Same. * src/locale_facets.cc: Same. * src/codecvt.cc: Same. * include/tr1/unordered_map: Use _GLIBCXX_BEGIN_NAMESPACE(tr1). * include/tr1/boost_shared_ptr.h: Same. * include/tr1/tuple * include/tr1/hashtable * include/tr1/type_traits_fwd.h: Same. * include/tr1/unordered_set * include/tr1/functional * include/tr1/ref_fwd.h: Same. * include/tr1/utility * include/tr1/type_traits * include/tr1/array * include/ext/hashtable.h: Use _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx). * include/ext/typelist.h: Same. * include/ext/hash_map: Same. * include/ext/rc_string_base.h: Same. * include/ext/pool_allocator.h: Same. * include/ext/iterator: Same. * include/ext/rb_tree: Same. * include/ext/numeric: Same. * include/ext/vstring.tcc: Same. * include/ext/sso_string_base.h: Same. * include/ext/stdio_filebuf.h: Same. * include/ext/algorithm: Same. * include/ext/codecvt_specializations.h: Same. * include/ext/new_allocator.h: Same. * include/ext/array_allocator.h: Same. * include/ext/vstring_util.h: Same. * include/ext/vstring_fwd.h: Same. * include/ext/mt_allocator.h: Same. * include/ext/debug_allocator.h: Same. * include/ext/slist: Same. * include/ext/stdio_sync_filebuf.h: Same. * include/ext/hash_fun.h: Same. * include/ext/malloc_allocator.h: Same. * include/ext/functional: Same. * include/ext/bitmap_allocator.h: Same. * include/ext/pod_char_traits.h: Same. * include/ext/vstring.h: Same. * include/ext/ropeimpl.h: Same. * include/ext/hash_set: Same. * include/ext/memory: Same. * include/ext/rope: Same. * include/bits/boost_concept_check.h: Same. * include/bits/stl_iterator.h: Same. * include/bits/char_traits.h: Same. * include/bits/cpp_type_traits.h: Same. * include/bits/concurrence.h: Same. * include/bits/atomicity.h: Same. * config/locale/gnu/numeric_members.cc: Same. * config/locale/gnu/collate_members.cc: Same. * config/locale/gnu/ctype_members.cc: Same. * config/locale/gnu/c_locale.cc: Same. * config/locale/gnu/codecvt_members.cc: Same. * config/locale/gnu/messages_members.cc: Same. * config/locale/gnu/c_locale.h: Same. * config/locale/gnu/monetary_members.cc: Same. * config/locale/gnu/time_members.cc: Same. * config/locale/ieee_1003.1-2001/c_locale.h: Same. * config/locale/generic/numeric_members.cc: Same. * config/locale/generic/collate_members.cc: Same. * config/locale/generic/ctype_members.cc: Same. * config/locale/generic/c_locale.cc: Same. * config/locale/generic/codecvt_members.cc: Same. * config/locale/generic/messages_members.cc: Same. * config/locale/generic/c_locale.h: Same. * config/locale/generic/monetary_members.cc: Same. * config/locale/generic/time_members.cc: Same. * config/os/aix/atomicity.h: Same. * config/os/irix/atomicity.h: Same. * config/cpu/powerpc/atomicity.h: Same. * config/cpu/cris/atomicity.h: Same. * config/cpu/ia64/atomicity.h: Same. * config/cpu/alpha/atomicity.h: Same. * config/cpu/m68k/atomicity.h: Same. * config/cpu/hppa/atomicity.h: Same. * config/cpu/mips/atomicity.h: Same. * config/cpu/sparc/atomicity.h: Same. * config/cpu/i386/atomicity.h: Same. * config/cpu/i486/atomicity.h: Same. * config/cpu/sh/atomicity.h: Same. * config/cpu/generic/atomicity.h: Same. * config/cpu/s390/atomicity.h: Same. * config/io/c_io_stdio.h: Same. * config/io/basic_file_stdio.cc: Same. * config/io/basic_file_stdio.h: Same. * src/misc-inst.cc: Same. * src/concept-inst.cc: Same. * src/ext-inst.cc: Same. * src/string-inst.cc: Same. * src/pool_allocator.cc: Same. * src/bitmap_allocator.cc: Same. * src/mt_allocator.cc: Same. * libsupc++/exception: Same. * libsupc++/vterminate.cc: Same. * testsuite/ext/hash_map/1.cc: Explicitly qualify __gnu_cxx::hash_map. * testsuite/ext/hash_map/14648.cc: Same. * libsupc++/eh_alloc.cc: Correct comment line spacing. From-SVN: r108775
2005-12-19 00:56:05 +00:00
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
using std::size_t;
using std::ptrdiff_t;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
typedef void (*__destroy_handler)(void*);
run_doxygen: Remove html_output_dir. 2008-03-25 Benjamin Kosnik <bkoz@redhat.com> * scripts/run_doxygen: Remove html_output_dir. Downgrade to Doxygen 1.5.1. * doc/doxygen/style.css: Delete. * doc/doxygen/user.cfg.in: Regenerate with Doxygen 1.5.1. (INPUT): Update. (PREDEFINED): Update. (HTML_OUTPUT): Remove html_output_dir, use html. (HTML_STYLESHEET): Remove style.css. * doc/doxygen/tables.html: Remove style.css use. * doc/doxygen/mainpage.html: Nested lists for Namespaces and Classes. * doc/doxygen/doxygroups.cc: Namespace edits. * doc/doxygen/Intro.3: Correct typo. * doc/xml/api.xml: Add gcc-4.3 links. * doc/html/api.html: Regenerate. * include/debug/debug.h: Document namepaces here. * include/parallel/base.h: Same. * include/ext/typelist.h: Same. * include/ext/pb_ds/tag_and_trait.hpp: Same. * include/tr1_impl/random: Adjust line break. * include/tr1_impl/unordered_map: Correct and or add markup. * include/tr1_impl/boost_shared_ptr.h: Correct and or add markup. * include/tr1_impl/functional_hash.h: Same. * include/tr1_impl/cmath: Same. * include/tr1_impl/functional: Same. * include/tr1_impl/unordered_set: Same. * include/tr1_impl/complex: Same. * include/tr1_impl/type_traits: Same. * include/tr1_impl/regex: Same. * include/tr1_impl/array: Same. * include/std/tuple: Same. * include/std/date_time: Same. * include/std/system_error: Same. * include/std/type_traits: Same. * include/ext/enc_filebuf.h: Same. * include/ext/throw_allocator.h: Same. * include/ext/pool_allocator.h: Same. * include/ext/bitmap_allocator.h: Same. * include/ext/concurrence.h: Same. * include/ext/codecvt_specializations.h: Same. * include/ext/stdio_sync_filebuf.h: Same. * include/ext/array_allocator.h: Same. * include/ext/mt_allocator.h: Same. * include/bits/locale_classes.h: Same. * include/bits/locale_facets.h: Same. * include/bits/codecvt.h: Same. * include/bits/char_traits.h: Same. * include/bits/allocator.h: Same. * include/bits/locale_facets_nonio.h: Same. * include/tr1/poly_laguerre.tcc: Same. * include/tr1/riemann_zeta.tcc: Same. * include/tr1/beta_function.tcc: Same. * include/tr1/tuple: Same. * include/tr1/exp_integral.tcc: Same. * include/tr1/gamma.tcc: Same. * include/tr1/hypergeometric.tcc: Same. * include/tr1/modified_bessel_func.tcc: Same. * include/tr1/legendre_function.tcc: Same. * include/tr1/type_traits: Same. * include/tr1/special_function_util.h: Same. * include/tr1/bessel_function.tcc: Same. * include/tr1/cmath: Same. * include/tr1/poly_hermite.tcc: Same. * include/tr1/ell_integral.tcc: Same. * config/abi/compatibility.h: Adjust file name. * testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Adjust line numbers. * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Same. * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: Same. From-SVN: r133544
2008-03-26 06:27:35 +00:00
/// Base class for pool object.
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
struct __pool_base
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
{
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
// Using short int as type for the binmap implies we are never
// caching blocks larger than 32768 with this allocator.
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
typedef unsigned short int _Binmap_type;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
// Variables used to configure the behavior of the allocator,
// assigned and explained in detail below.
struct _Tune
{
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
// Compile time constants for the default _Tune values.
enum { _S_align = 8 };
enum { _S_max_bytes = 128 };
enum { _S_min_bin = 8 };
enum { _S_chunk_size = 4096 - 4 * sizeof(void*) };
enum { _S_max_threads = 4096 };
enum { _S_freelist_headroom = 10 };
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
// Alignment needed.
// NB: In any case must be >= sizeof(_Block_record), that
// is 4 on 32 bit machines and 8 on 64 bit machines.
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
size_t _M_align;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
// Allocation requests (after round-up to power of 2) below
// this value will be handled by the allocator. A raw new/
// call will be used for requests larger than this value.
// NB: Must be much smaller than _M_chunk_size and in any
// case <= 32768.
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
size_t _M_max_bytes;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
// Size in bytes of the smallest bin.
// NB: Must be a power of 2 and >= _M_align (and of course
// much smaller than _M_max_bytes).
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
size_t _M_min_bin;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
// In order to avoid fragmenting and minimize the number of
// new() calls we always request new memory using this
// value. Based on previous discussions on the libstdc++
auto_ptr.h: Fix comment typos. 2008-01-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> * include/backward/auto_ptr.h: Fix comment typos. * include/bits/algorithmfwd.h: Likewise. * include/bits/basic_ios.h: Likewise. * include/bits/c++config: Likewise. * include/bits/char_traits.h: Likewise. * include/bits/codecvt.h: Likewise. * include/bits/gslice.h: Likewise. * include/bits/ios_base.h: Likewise. * include/bits/locale_facets.h: Likewise. * include/bits/locale_facets_nonio.tcc: Likewise. * include/bits/postypes.h: Likewise. * include/bits/sstream.tcc: Likewise. * include/bits/stl_algo.h: Likewise. * include/bits/stl_deque.h: Likewise. * include/bits/stl_iterator.h: Likewise. * include/bits/stl_iterator_base_types.h Likewise. * include/bits/stl_list.h: Likewise. * include/bits/stl_map.h: Likewise. * include/bits/stl_multimap.h: Likewise. * include/bits/stl_multiset.h: Likewise. * include/bits/stl_set.h: Likewise. * include/bits/stl_vector.h: Likewise. * include/bits/valarray_array.h: Likewise. * include/debug/safe_base.h: Likewise. * include/ext/bitmap_allocator.h: Likewise. * include/ext/codecvt_specializations.h Likewise. * include/ext/mt_allocator.h: Likewise. * include/ext/rc_string_base.h: Likewise. * include/ext/rope: Likewise. * include/parallel/checkers.h: Likewise. * include/parallel/find.h: Likewise. * include/parallel/multiseq_selection.h: Likewise. * include/parallel/partition.h: Likewise. * include/parallel/settings.h: Likewise. * include/std/bitset: Likewise. * include/std/complex: Likewise. * include/std/fstream: Likewise. * include/std/istream: Likewise. * include/std/limits: Likewise. * include/std/ostream: Likewise. * include/std/stdexcept: Likewise. * include/std/streambuf: Likewise. * include/tr1/bessel_function.tcc: Likewise. * include/tr1/cmath: Likewise. * include/tr1/ell_integral.tcc: Likewise. * include/tr1/hypergeometric.tcc: Likewise. * include/tr1/legendre_function.tcc: Likewise. * include/tr1_impl/random: Likewise. * include/tr1_impl/regex: Likewise. From-SVN: r131982
2008-01-31 18:44:55 +00:00
// mailing list we have chosen the value below.
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
// See http://gcc.gnu.org/ml/libstdc++/2001-07/msg00077.html
// NB: At least one order of magnitude > _M_max_bytes.
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
size_t _M_chunk_size;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
// The maximum number of supported threads. For
// single-threaded operation, use one. Maximum values will
// vary depending on details of the underlying system. (For
// instance, Linux 2.4.18 reports 4070 in
// /proc/sys/kernel/threads-max, while Linux 2.6.6 reports
// 65534)
size_t _M_max_threads;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
// Each time a deallocation occurs in a threaded application
// we make sure that there are no more than
// _M_freelist_headroom % of used memory on the freelist. If
// the number of additional records is more than
// _M_freelist_headroom % of the freelist, we move these
// records back to the global pool.
size_t _M_freelist_headroom;
// Set to true forces all allocations to use new().
bool _M_force_new;
explicit
_Tune()
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
: _M_align(_S_align), _M_max_bytes(_S_max_bytes), _M_min_bin(_S_min_bin),
_M_chunk_size(_S_chunk_size), _M_max_threads(_S_max_threads),
_M_freelist_headroom(_S_freelist_headroom),
_M_force_new(std::getenv("GLIBCXX_FORCE_NEW") ? true : false)
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
{ }
explicit
_Tune(size_t __align, size_t __maxb, size_t __minbin, size_t __chunk,
size_t __maxthreads, size_t __headroom, bool __force)
: _M_align(__align), _M_max_bytes(__maxb), _M_min_bin(__minbin),
_M_chunk_size(__chunk), _M_max_threads(__maxthreads),
_M_freelist_headroom(__headroom), _M_force_new(__force)
{ }
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
};
struct _Block_address
{
void* _M_initial;
_Block_address* _M_next;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
};
const _Tune&
_M_get_options() const
{ return _M_options; }
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
void
_M_set_options(_Tune __t)
{
if (!_M_init)
_M_options = __t;
}
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
bool
_M_check_threshold(size_t __bytes)
{ return __bytes > _M_options._M_max_bytes || _M_options._M_force_new; }
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
size_t
_M_get_binmap(size_t __bytes)
{ return _M_binmap[__bytes]; }
size_t
_M_get_align()
{ return _M_options._M_align; }
explicit
__pool_base()
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
: _M_options(_Tune()), _M_binmap(NULL), _M_init(false) { }
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
explicit
__pool_base(const _Tune& __options)
: _M_options(__options), _M_binmap(NULL), _M_init(false) { }
private:
explicit
__pool_base(const __pool_base&);
__pool_base&
operator=(const __pool_base&);
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
protected:
// Configuration options.
_Tune _M_options;
_Binmap_type* _M_binmap;
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
// Configuration of the pool object via _M_options can happen
// after construction but before initialization. After
// initialization is complete, this variable is set to true.
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
bool _M_init;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
};
/**
* @brief Data describing the underlying memory pool, parameterized on
* threading support.
*/
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
template<bool _Thread>
class __pool;
/// Specialization for single thread.
template<>
class __pool<false> : public __pool_base
{
public:
union _Block_record
{
// Points to the block_record of the next free block.
_Block_record* _M_next;
};
struct _Bin_record
{
// An "array" of pointers to the first free block.
_Block_record** _M_first;
// A list of the initial addresses of all allocated blocks.
_Block_address* _M_address;
};
void
_M_initialize_once()
{
if (__builtin_expect(_M_init == false, false))
_M_initialize();
}
void
_M_destroy() throw();
char*
_M_reserve_block(size_t __bytes, const size_t __thread_id);
void
_M_reclaim_block(char* __p, size_t __bytes);
size_t
_M_get_thread_id() { return 0; }
const _Bin_record&
_M_get_bin(size_t __which)
{ return _M_bin[__which]; }
void
_M_adjust_freelist(const _Bin_record&, _Block_record*, size_t)
{ }
explicit __pool()
: _M_bin(NULL), _M_bin_size(1) { }
explicit __pool(const __pool_base::_Tune& __tune)
: __pool_base(__tune), _M_bin(NULL), _M_bin_size(1) { }
private:
// An "array" of bin_records each of which represents a specific
// power of 2 size. Memory to this "array" is allocated in
// _M_initialize().
_Bin_record* _M_bin;
// Actual value calculated in _M_initialize().
size_t _M_bin_size;
void
_M_initialize();
};
#ifdef __GTHREADS
/// Specialization for thread enabled, via gthreads.h.
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
template<>
class __pool<true> : public __pool_base
{
public:
// Each requesting thread is assigned an id ranging from 1 to
// _S_max_threads. Thread id 0 is used as a global memory pool.
// In order to get constant performance on the thread assignment
// routine, we keep a list of free ids. When a thread first
// requests memory we remove the first record in this list and
// stores the address in a __gthread_key. When initializing the
// __gthread_key we specify a destructor. When this destructor
// (i.e. the thread dies) is called, we return the thread id to
// the front of this list.
struct _Thread_record
{
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
// Points to next free thread id record. NULL if last record in list.
_Thread_record* _M_next;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
// Thread id ranging from 1 to _S_max_threads.
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
size_t _M_id;
};
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
union _Block_record
{
// Points to the block_record of the next free block.
_Block_record* _M_next;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
// The thread id of the thread which has requested this block.
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
size_t _M_thread_id;
};
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
struct _Bin_record
{
// An "array" of pointers to the first free block for each
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
// thread id. Memory to this "array" is allocated in
// _S_initialize() for _S_max_threads + global pool 0.
_Block_record** _M_first;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
// A list of the initial addresses of all allocated blocks.
_Block_address* _M_address;
// An "array" of counters used to keep track of the amount of
// blocks that are on the freelist/used for each thread id.
// - Note that the second part of the allocated _M_used "array"
// actually hosts (atomic) counters of reclaimed blocks: in
// _M_reserve_block and in _M_reclaim_block those numbers are
// subtracted from the first ones to obtain the actual size
// of the "working set" of the given thread.
// - Memory to these "arrays" is allocated in _S_initialize()
// for _S_max_threads + global pool 0.
size_t* _M_free;
size_t* _M_used;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
// Each bin has its own mutex which is used to ensure data
// integrity while changing "ownership" on a block. The mutex
// is initialized in _S_initialize().
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
__gthread_mutex_t* _M_mutex;
};
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
// XXX GLIBCXX_ABI Deprecated
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
void
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
_M_initialize(__destroy_handler);
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
void
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
_M_initialize_once()
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
{
if (__builtin_expect(_M_init == false, false))
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
_M_initialize();
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
}
void
_M_destroy() throw();
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
char*
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
_M_reserve_block(size_t __bytes, const size_t __thread_id);
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
void
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
_M_reclaim_block(char* __p, size_t __bytes);
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
const _Bin_record&
_M_get_bin(size_t __which)
{ return _M_bin[__which]; }
void
_M_adjust_freelist(const _Bin_record& __bin, _Block_record* __block,
size_t __thread_id)
{
if (__gthread_active_p())
{
__block->_M_thread_id = __thread_id;
--__bin._M_free[__thread_id];
++__bin._M_used[__thread_id];
}
}
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
// XXX GLIBCXX_ABI Deprecated
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
void
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
_M_destroy_thread_key(void*);
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
size_t
_M_get_thread_id();
explicit __pool()
: _M_bin(NULL), _M_bin_size(1), _M_thread_freelist(NULL)
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
{ }
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
explicit __pool(const __pool_base::_Tune& __tune)
: __pool_base(__tune), _M_bin(NULL), _M_bin_size(1),
_M_thread_freelist(NULL)
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
{ }
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
private:
// An "array" of bin_records each of which represents a specific
// power of 2 size. Memory to this "array" is allocated in
// _M_initialize().
_Bin_record* _M_bin;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
// Actual value calculated in _M_initialize().
size_t _M_bin_size;
_Thread_record* _M_thread_freelist;
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
void* _M_thread_freelist_initial;
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
void
_M_initialize();
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
};
#endif
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
template<template <bool> class _PoolTp, bool _Thread>
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
struct __common_pool
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
{
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
typedef _PoolTp<_Thread> pool_type;
static pool_type&
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
_S_get_pool()
{
static pool_type _S_pool;
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
return _S_pool;
}
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
};
template<template <bool> class _PoolTp, bool _Thread>
struct __common_pool_base;
template<template <bool> class _PoolTp>
struct __common_pool_base<_PoolTp, false>
: public __common_pool<_PoolTp, false>
{
using __common_pool<_PoolTp, false>::_S_get_pool;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
static void
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
_S_initialize_once()
{
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
static bool __init;
if (__builtin_expect(__init == false, false))
{
_S_get_pool()._M_initialize_once();
__init = true;
}
}
};
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
#ifdef __GTHREADS
template<template <bool> class _PoolTp>
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
struct __common_pool_base<_PoolTp, true>
: public __common_pool<_PoolTp, true>
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
{
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
using __common_pool<_PoolTp, true>::_S_get_pool;
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
static void
_S_initialize()
{ _S_get_pool()._M_initialize_once(); }
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
static void
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
_S_initialize_once()
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
{
static bool __init;
if (__builtin_expect(__init == false, false))
{
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
if (__gthread_active_p())
{
// On some platforms, __gthread_once_t is an aggregate.
static __gthread_once_t __once = __GTHREAD_ONCE_INIT;
__gthread_once(&__once, _S_initialize);
}
// Double check initialization. May be necessary on some
// systems for proper construction when not compiling with
// thread flags.
_S_get_pool()._M_initialize_once();
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
__init = true;
}
}
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
};
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
#endif
run_doxygen: Remove html_output_dir. 2008-03-25 Benjamin Kosnik <bkoz@redhat.com> * scripts/run_doxygen: Remove html_output_dir. Downgrade to Doxygen 1.5.1. * doc/doxygen/style.css: Delete. * doc/doxygen/user.cfg.in: Regenerate with Doxygen 1.5.1. (INPUT): Update. (PREDEFINED): Update. (HTML_OUTPUT): Remove html_output_dir, use html. (HTML_STYLESHEET): Remove style.css. * doc/doxygen/tables.html: Remove style.css use. * doc/doxygen/mainpage.html: Nested lists for Namespaces and Classes. * doc/doxygen/doxygroups.cc: Namespace edits. * doc/doxygen/Intro.3: Correct typo. * doc/xml/api.xml: Add gcc-4.3 links. * doc/html/api.html: Regenerate. * include/debug/debug.h: Document namepaces here. * include/parallel/base.h: Same. * include/ext/typelist.h: Same. * include/ext/pb_ds/tag_and_trait.hpp: Same. * include/tr1_impl/random: Adjust line break. * include/tr1_impl/unordered_map: Correct and or add markup. * include/tr1_impl/boost_shared_ptr.h: Correct and or add markup. * include/tr1_impl/functional_hash.h: Same. * include/tr1_impl/cmath: Same. * include/tr1_impl/functional: Same. * include/tr1_impl/unordered_set: Same. * include/tr1_impl/complex: Same. * include/tr1_impl/type_traits: Same. * include/tr1_impl/regex: Same. * include/tr1_impl/array: Same. * include/std/tuple: Same. * include/std/date_time: Same. * include/std/system_error: Same. * include/std/type_traits: Same. * include/ext/enc_filebuf.h: Same. * include/ext/throw_allocator.h: Same. * include/ext/pool_allocator.h: Same. * include/ext/bitmap_allocator.h: Same. * include/ext/concurrence.h: Same. * include/ext/codecvt_specializations.h: Same. * include/ext/stdio_sync_filebuf.h: Same. * include/ext/array_allocator.h: Same. * include/ext/mt_allocator.h: Same. * include/bits/locale_classes.h: Same. * include/bits/locale_facets.h: Same. * include/bits/codecvt.h: Same. * include/bits/char_traits.h: Same. * include/bits/allocator.h: Same. * include/bits/locale_facets_nonio.h: Same. * include/tr1/poly_laguerre.tcc: Same. * include/tr1/riemann_zeta.tcc: Same. * include/tr1/beta_function.tcc: Same. * include/tr1/tuple: Same. * include/tr1/exp_integral.tcc: Same. * include/tr1/gamma.tcc: Same. * include/tr1/hypergeometric.tcc: Same. * include/tr1/modified_bessel_func.tcc: Same. * include/tr1/legendre_function.tcc: Same. * include/tr1/type_traits: Same. * include/tr1/special_function_util.h: Same. * include/tr1/bessel_function.tcc: Same. * include/tr1/cmath: Same. * include/tr1/poly_hermite.tcc: Same. * include/tr1/ell_integral.tcc: Same. * config/abi/compatibility.h: Adjust file name. * testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Adjust line numbers. * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Same. * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: Same. From-SVN: r133544
2008-03-26 06:27:35 +00:00
/// Policy for shared __pool objects.
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
template<template <bool> class _PoolTp, bool _Thread>
struct __common_pool_policy : public __common_pool_base<_PoolTp, _Thread>
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
{
template<typename _Tp1, template <bool> class _PoolTp1 = _PoolTp,
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
bool _Thread1 = _Thread>
struct _M_rebind
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
{ typedef __common_pool_policy<_PoolTp1, _Thread1> other; };
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
using __common_pool_base<_PoolTp, _Thread>::_S_get_pool;
using __common_pool_base<_PoolTp, _Thread>::_S_initialize_once;
};
template<typename _Tp, template <bool> class _PoolTp, bool _Thread>
struct __per_type_pool
{
typedef _Tp value_type;
typedef _PoolTp<_Thread> pool_type;
static pool_type&
_S_get_pool()
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
{
// Sane defaults for the _PoolTp.
typedef typename pool_type::_Block_record _Block_record;
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
const static size_t __a = (__alignof__(_Tp) >= sizeof(_Block_record)
? __alignof__(_Tp) : sizeof(_Block_record));
typedef typename __pool_base::_Tune _Tune;
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
static _Tune _S_tune(__a, sizeof(_Tp) * 64,
sizeof(_Tp) * 2 >= __a ? sizeof(_Tp) * 2 : __a,
sizeof(_Tp) * size_t(_Tune::_S_chunk_size),
_Tune::_S_max_threads,
_Tune::_S_freelist_headroom,
std::getenv("GLIBCXX_FORCE_NEW") ? true : false);
static pool_type _S_pool(_S_tune);
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
return _S_pool;
}
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
};
template<typename _Tp, template <bool> class _PoolTp, bool _Thread>
struct __per_type_pool_base;
template<typename _Tp, template <bool> class _PoolTp>
struct __per_type_pool_base<_Tp, _PoolTp, false>
: public __per_type_pool<_Tp, _PoolTp, false>
{
using __per_type_pool<_Tp, _PoolTp, false>::_S_get_pool;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
static void
_S_initialize_once()
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
{
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
static bool __init;
if (__builtin_expect(__init == false, false))
{
_S_get_pool()._M_initialize_once();
__init = true;
}
}
};
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
#ifdef __GTHREADS
template<typename _Tp, template <bool> class _PoolTp>
struct __per_type_pool_base<_Tp, _PoolTp, true>
: public __per_type_pool<_Tp, _PoolTp, true>
{
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
using __per_type_pool<_Tp, _PoolTp, true>::_S_get_pool;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
static void
_S_initialize()
{ _S_get_pool()._M_initialize_once(); }
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
static void
_S_initialize_once()
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
{
static bool __init;
if (__builtin_expect(__init == false, false))
{
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
if (__gthread_active_p())
{
// On some platforms, __gthread_once_t is an aggregate.
static __gthread_once_t __once = __GTHREAD_ONCE_INIT;
__gthread_once(&__once, _S_initialize);
}
// Double check initialization. May be necessary on some
// systems for proper construction when not compiling with
// thread flags.
_S_get_pool()._M_initialize_once();
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
__init = true;
}
}
};
#endif
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
run_doxygen: Remove html_output_dir. 2008-03-25 Benjamin Kosnik <bkoz@redhat.com> * scripts/run_doxygen: Remove html_output_dir. Downgrade to Doxygen 1.5.1. * doc/doxygen/style.css: Delete. * doc/doxygen/user.cfg.in: Regenerate with Doxygen 1.5.1. (INPUT): Update. (PREDEFINED): Update. (HTML_OUTPUT): Remove html_output_dir, use html. (HTML_STYLESHEET): Remove style.css. * doc/doxygen/tables.html: Remove style.css use. * doc/doxygen/mainpage.html: Nested lists for Namespaces and Classes. * doc/doxygen/doxygroups.cc: Namespace edits. * doc/doxygen/Intro.3: Correct typo. * doc/xml/api.xml: Add gcc-4.3 links. * doc/html/api.html: Regenerate. * include/debug/debug.h: Document namepaces here. * include/parallel/base.h: Same. * include/ext/typelist.h: Same. * include/ext/pb_ds/tag_and_trait.hpp: Same. * include/tr1_impl/random: Adjust line break. * include/tr1_impl/unordered_map: Correct and or add markup. * include/tr1_impl/boost_shared_ptr.h: Correct and or add markup. * include/tr1_impl/functional_hash.h: Same. * include/tr1_impl/cmath: Same. * include/tr1_impl/functional: Same. * include/tr1_impl/unordered_set: Same. * include/tr1_impl/complex: Same. * include/tr1_impl/type_traits: Same. * include/tr1_impl/regex: Same. * include/tr1_impl/array: Same. * include/std/tuple: Same. * include/std/date_time: Same. * include/std/system_error: Same. * include/std/type_traits: Same. * include/ext/enc_filebuf.h: Same. * include/ext/throw_allocator.h: Same. * include/ext/pool_allocator.h: Same. * include/ext/bitmap_allocator.h: Same. * include/ext/concurrence.h: Same. * include/ext/codecvt_specializations.h: Same. * include/ext/stdio_sync_filebuf.h: Same. * include/ext/array_allocator.h: Same. * include/ext/mt_allocator.h: Same. * include/bits/locale_classes.h: Same. * include/bits/locale_facets.h: Same. * include/bits/codecvt.h: Same. * include/bits/char_traits.h: Same. * include/bits/allocator.h: Same. * include/bits/locale_facets_nonio.h: Same. * include/tr1/poly_laguerre.tcc: Same. * include/tr1/riemann_zeta.tcc: Same. * include/tr1/beta_function.tcc: Same. * include/tr1/tuple: Same. * include/tr1/exp_integral.tcc: Same. * include/tr1/gamma.tcc: Same. * include/tr1/hypergeometric.tcc: Same. * include/tr1/modified_bessel_func.tcc: Same. * include/tr1/legendre_function.tcc: Same. * include/tr1/type_traits: Same. * include/tr1/special_function_util.h: Same. * include/tr1/bessel_function.tcc: Same. * include/tr1/cmath: Same. * include/tr1/poly_hermite.tcc: Same. * include/tr1/ell_integral.tcc: Same. * config/abi/compatibility.h: Adjust file name. * testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Adjust line numbers. * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Same. * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: Same. From-SVN: r133544
2008-03-26 06:27:35 +00:00
/// Policy for individual __pool objects.
[multiple changes] 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * include/ext/mt_allocator.h (__gnu_cxx::__create_handler): Remove. (__pool<true>::_M_destroy_thread_key): Compatibility only. (__pool<true>::_M_initialize(__destroy): Same. (__pool<true>::_M_initialize): New. (__pool<true>::_M_initialize_once): Nothing fancy. (__pool<true>::_M_once): Remove. (__common_pool): New. (__common_pool_base): New. (__per_type_pool): New. (__per_type_pool_base): New. * src/mt_allocator.cc: Same. * config/linker-map.gnu (__pool<true>::_M_initialize()): Add. 2005-09-11 Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static. (__gnu_internal::__freelist): New type. (__gnu_internal::freelist): New variable. (__gnu_internal::_M_destroy_thread_key): New function. (__gnu_cxx::__pool<true>::_M_destroy): Don't delete _M_thread_freelist_initial. (__gnu_cxx::__pool<true>::_M_initialize): Make argument nameless. Don't use _M_thread_freelist and _M_thread_freelist_initial __pool<true> fields, instead use __gnu_internal::freelist fields, call gthread_key_create just once. Use __gnu_internal::_M_destroy_thread_key as key destructor. (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than _Thread_record* in the thread specific value. Don't use _M_thread_freelist __pool<true> field, instead use __gnu_internal::freelist fields. (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing. 2005-09-11 Benjamin Kosnik <bkoz@redhat.com> Jakub Jelinek <jakub@redhat.com> PR libstdc++/19265 PR libstdc++/22309 * testsuite/testsuite_shared.cc: New. * testsuite/lib/dg-options.exp (dg-require-sharedlib): New. * testsuite/lib/libstdc++.exp (libstdc++_init): Look for shared library, and set v3-sharedlib based on this. (check_v3_target_sharedlib): New. (proc v3-build_support): Build shared objects. * testsuite/ext/mt_allocator/22309_thread.cc: New, use above. From-SVN: r104161
2005-09-12 04:49:11 +00:00
template<typename _Tp, template <bool> class _PoolTp, bool _Thread>
struct __per_type_pool_policy
: public __per_type_pool_base<_Tp, _PoolTp, _Thread>
{
template<typename _Tp1, template <bool> class _PoolTp1 = _PoolTp,
bool _Thread1 = _Thread>
struct _M_rebind
{ typedef __per_type_pool_policy<_Tp1, _PoolTp1, _Thread1> other; };
using __per_type_pool_base<_Tp, _PoolTp, _Thread>::_S_get_pool;
using __per_type_pool_base<_Tp, _PoolTp, _Thread>::_S_initialize_once;
};
run_doxygen: Remove html_output_dir. 2008-03-25 Benjamin Kosnik <bkoz@redhat.com> * scripts/run_doxygen: Remove html_output_dir. Downgrade to Doxygen 1.5.1. * doc/doxygen/style.css: Delete. * doc/doxygen/user.cfg.in: Regenerate with Doxygen 1.5.1. (INPUT): Update. (PREDEFINED): Update. (HTML_OUTPUT): Remove html_output_dir, use html. (HTML_STYLESHEET): Remove style.css. * doc/doxygen/tables.html: Remove style.css use. * doc/doxygen/mainpage.html: Nested lists for Namespaces and Classes. * doc/doxygen/doxygroups.cc: Namespace edits. * doc/doxygen/Intro.3: Correct typo. * doc/xml/api.xml: Add gcc-4.3 links. * doc/html/api.html: Regenerate. * include/debug/debug.h: Document namepaces here. * include/parallel/base.h: Same. * include/ext/typelist.h: Same. * include/ext/pb_ds/tag_and_trait.hpp: Same. * include/tr1_impl/random: Adjust line break. * include/tr1_impl/unordered_map: Correct and or add markup. * include/tr1_impl/boost_shared_ptr.h: Correct and or add markup. * include/tr1_impl/functional_hash.h: Same. * include/tr1_impl/cmath: Same. * include/tr1_impl/functional: Same. * include/tr1_impl/unordered_set: Same. * include/tr1_impl/complex: Same. * include/tr1_impl/type_traits: Same. * include/tr1_impl/regex: Same. * include/tr1_impl/array: Same. * include/std/tuple: Same. * include/std/date_time: Same. * include/std/system_error: Same. * include/std/type_traits: Same. * include/ext/enc_filebuf.h: Same. * include/ext/throw_allocator.h: Same. * include/ext/pool_allocator.h: Same. * include/ext/bitmap_allocator.h: Same. * include/ext/concurrence.h: Same. * include/ext/codecvt_specializations.h: Same. * include/ext/stdio_sync_filebuf.h: Same. * include/ext/array_allocator.h: Same. * include/ext/mt_allocator.h: Same. * include/bits/locale_classes.h: Same. * include/bits/locale_facets.h: Same. * include/bits/codecvt.h: Same. * include/bits/char_traits.h: Same. * include/bits/allocator.h: Same. * include/bits/locale_facets_nonio.h: Same. * include/tr1/poly_laguerre.tcc: Same. * include/tr1/riemann_zeta.tcc: Same. * include/tr1/beta_function.tcc: Same. * include/tr1/tuple: Same. * include/tr1/exp_integral.tcc: Same. * include/tr1/gamma.tcc: Same. * include/tr1/hypergeometric.tcc: Same. * include/tr1/modified_bessel_func.tcc: Same. * include/tr1/legendre_function.tcc: Same. * include/tr1/type_traits: Same. * include/tr1/special_function_util.h: Same. * include/tr1/bessel_function.tcc: Same. * include/tr1/cmath: Same. * include/tr1/poly_hermite.tcc: Same. * include/tr1/ell_integral.tcc: Same. * config/abi/compatibility.h: Adjust file name. * testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Adjust line numbers. * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Same. * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: Same. From-SVN: r133544
2008-03-26 06:27:35 +00:00
/// Base class for _Tp dependent member functions.
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
template<typename _Tp>
class __mt_alloc_base
{
public:
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef _Tp* pointer;
typedef const _Tp* const_pointer;
typedef _Tp& reference;
typedef const _Tp& const_reference;
typedef _Tp value_type;
pointer
address(reference __x) const
{ return &__x; }
const_pointer
address(const_reference __x) const
{ return &__x; }
size_type
max_size() const throw()
{ return size_t(-1) / sizeof(_Tp); }
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 402. wrong new expression in [some_] allocator::construct
void
construct(pointer __p, const _Tp& __val)
throw_allocator.h (throw_allocator<>:: construct<>(pointer, _Args&&...)): Add. 2007-10-26 Paolo Carlini <pcarlini@suse.de> * include/ext/throw_allocator.h (throw_allocator<>:: construct<>(pointer, _Args&&...)): Add. * include/ext/pool_allocator.h (__pool_alloc<>:: construct<>(pointer, _Args&&...)): Likewise. (construct(pointer, const _Tp&)): Cast pointer to void*. * include/ext/bitmap_allocator.h (bitmap_allocator<>:: construct<>(pointer, _Args&&...)): Add. (construct(pointer, const _Tp&)): Cast pointer to void*. * include/ext/new_allocator.h (new_allocator<>:: construct<>(pointer, _Args&&...)): Add. (construct(pointer, const _Tp&)): Cast pointer to void*. * include/ext/malloc_allocator.h (malloc_allocator<>:: construct<>(pointer, _Args&&...)): Add. (construct(pointer, const _Tp&)): Cast pointer to void*. * include/ext/array_allocator.h (array_allocator<>:: construct<>(pointer, _Args&&...)): Add. (construct(pointer, const _Tp&)): Cast pointer to void*. * include/ext/mt_allocator.h (__mt_alloc<>:: construct<>(pointer, _Args&&...)): Add. (construct(pointer, const _Tp&)): Cast pointer to void*. * testsuite/util/testsuite_allocator.h (tracker_allocator<>:: construct<>(pointer, _Args&&...)): Add. (construct(pointer, const _Tp&)): Cast pointer to void*. (uneq_allocator<>::construct<>(pointer, _Args&&...)): Add. (construct(pointer, const _Tp&)): Cast pointer to void*. * testsuite/ext/mt_allocator/variadic_construct.cc: New. * testsuite/ext/new_allocator/variadic_construct.cc: Likewise. * testsuite/ext/throw_allocator/variadic_construct.cc: Likewise. * testsuite/ext/malloc_allocator/variadic_construct.cc: Likewise. * testsuite/ext/pool_allocator/variadic_construct.cc: Likewise. * testsuite/ext/bitmap_allocator/variadic_construct.cc: Likewise. * testsuite/ext/array_allocator/variadic_construct.cc: Likewise. From-SVN: r129672
2007-10-27 00:41:21 +00:00
{ ::new((void *)__p) _Tp(__val); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename... _Args>
void
construct(pointer __p, _Args&&... __args)
{ ::new((void *)__p) _Tp(std::forward<_Args>(__args)...); }
#endif
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
void
destroy(pointer __p) { __p->~_Tp(); }
};
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
#ifdef __GTHREADS
#define __thread_default true
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
#else
#define __thread_default false
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
#endif
/**
* @brief This is a fixed size (power of 2) allocator which - when
* compiled with thread support - will maintain one freelist per
* size per thread plus a "global" one. Steps are taken to limit
* the per thread freelist sizes (by returning excess back to
* the "global" list).
user.cfg.in: Tweaks. 2009-02-20 Benjamin Kosnik <bkoz@redhat.com> * doc/doxygen/user.cfg.in: Tweaks. * doc/doxygen/doxygroups.cc: Prefer markup that can be elsewhere, be elsewhere. * include/tr1_impl/unordered_map: Just use most specialized container module. * include/tr1_impl/unordered_set: Same. * include/tr1_impl/array: Same. * include/bits/stl_list.h: Same. * include/bits/stl_map.h: Same. * include/bits/stl_queue.h: Same. * include/bits/stl_set.h: Same. * include/bits/stl_stack.h: Same. * include/bits/forward_list.h: Same. * include/bits/basic_string.h: Same. * include/bits/stl_multimap.h: Same. * include/bits/stl_vector.h: Same. * include/bits/stl_deque.h: Same. * include/bits/stl_multiset.h: Same. * include/bits/stl_bvector.h: Same. * include/backward/binders.h: Change binder module to binders. * include/std/complex: Add complex_numers module. * include/tr1_impl/complex: Same. * include/std/valarray: Add numeric_arrays module. * include/bits/gslice_array.h: Same. * include/bits/gslice.h: Same. * include/bits/mask_array.h: Same. * include/bits/slice_array.h: Same. * include/bits/indirect_array.h: Same. * include/bits/allocator.h: Add allocators module. * include/ext/throw_allocator.h * include/ext/pool_allocator.h * include/ext/bitmap_allocator.h * include/ext/new_allocator.h * include/ext/malloc_allocator.h * include/ext/array_allocator.h * include/ext/mt_allocator.h * include/ext/debug_allocator.h * include/ext/extptr_allocator.h * include/tr1_impl/functional: Move namespace markup here. * include/tr1_impl/regex: Same. * include/tr1_impl/type_traits: Add metaprogramming module. * include/std/type_traits: Same. * include/std/memory: Add memory module. * include/std/ratio: Add ratio module. * include/std/chrono: Move namespace markup here, add time module. * include/std/thread: Move namespace markup here, add concurrency module. * include/std/mutex: Use concurrency module. * include/std/condition_variable: Same. * include/bits/ios_base.h: Refine io module. * include/bits/basic_ios.h: Same. * include/std/fstream: Same. * include/std/istream: Same. * include/std/ostream: Same. * include/std/sstream: Same. * include/ext/vstring.h: Correct parameter markup. * include/bits/shared_ptr.h: Add pointer_abstractions module. * include/bits/unique_ptr.h: Same. * include/bits/algorithmfwd.h: Add mutating_algorithms, non_mutating_algorithms, sorting_algorithms. Adjust nesting. * include/bits/stl_heap.h: Add markup for new groupings. * include/bits/stl_algobase.h: Same. * include/bits/stl_algo.h: Same. * include/c_compatibility/stdatomic.h: Add atomics module. * include/c_global/cstdatomic: Same. * libsupc++/exception: Add exceptions module. * libsupc++/typeinfo: Same. * libsupc++/new: Same. * libsupc++/exception_ptr.h: Same. * include/std/system_error: Same. * include/std/stdexcept: Same. * libsupc++/cxxabi.h: Move doxygroups.cc markup here. * libsupc++/cxxabi-forced.h: Same. * testsuite/27_io/ios_base/cons/assign_neg.cc: Fix up line numbers. * testsuite/27_io/ios_base/cons/copy_neg.cc: Same. * testsuite/30_threads/condition_variable_any/cons/assign_neg.cc: Same. * testsuite/30_threads/condition_variable_any/cons/copy_neg.cc: Same. * testsuite/30_threads/mutex/cons/assign_neg.cc: Same. * testsuite/30_threads/mutex/cons/copy_neg.cc: Same. * testsuite/30_threads/timed_mutex/cons/assign_neg.cc: Same. * testsuite/30_threads/timed_mutex/cons/copy_neg.cc: Same. * testsuite/30_threads/thread/cons/assign_neg.cc: Same. * testsuite/30_threads/thread/cons/copy_neg.cc: Same. * testsuite/30_threads/recursive_mutex/cons/assign_neg.cc: Same. * testsuite/30_threads/recursive_mutex/cons/copy_neg.cc: Same. * testsuite/30_threads/condition_variable/cons/assign_neg.cc: Same. * testsuite/30_threads/condition_variable/cons/copy_neg.cc: Same. * testsuite/30_threads/recursive_timed_mutex/cons/assign_neg.cc: Same. * testsuite/30_threads/recursive_timed_mutex/cons/copy_neg.cc: Same. * testsuite/29_atomics/atomic/cons/assign_neg.cc: Same. * testsuite/29_atomics/atomic/cons/copy_neg.cc: Same. * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: Same. * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: Same. * testsuite/23_containers/vector/requirements/dr438/ constructor_1_neg.cc: Same. * testsuite/23_containers/vector/requirements/dr438/ constructor_2_neg.cc: Same. * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: Same. * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: Same. * testsuite/23_containers/deque/requirements/dr438/ constructor_1_neg.cc: Same. * testsuite/23_containers/deque/requirements/dr438/ constructor_2_neg.cc: Same. * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: Same. * testsuite/23_containers/list/requirements/dr438/insert_neg.cc: Same. * testsuite/23_containers/list/requirements/dr438/ constructor_1_neg.cc: Same. * testsuite/23_containers/list/requirements/dr438/ constructor_2_neg.cc: Same. * testsuite/20_util/duration/cons/1_neg.cc: Same. * testsuite/20_util/duration/requirements/typedefs_neg1.cc: Same. * testsuite/20_util/duration/requirements/typedefs_neg2.cc: Same. * testsuite/20_util/duration/requirements/typedefs_neg3.cc: Same. * testsuite/20_util/unique_ptr/modifiers/reset_neg.cc: Same. * testsuite/20_util/unique_ptr/assign/assign.cc: Same. * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Same. * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: Same. * testsuite/20_util/ratio/cons/cons_overflow.cc: Same. * testsuite/20_util/ratio/operations/ops_overflow.cc: Same. From-SVN: r144343
2009-02-21 00:45:21 +00:00
* @ingroup allocators
*
* Further details:
run_doxygen: Remove html_output_dir. 2008-03-25 Benjamin Kosnik <bkoz@redhat.com> * scripts/run_doxygen: Remove html_output_dir. Downgrade to Doxygen 1.5.1. * doc/doxygen/style.css: Delete. * doc/doxygen/user.cfg.in: Regenerate with Doxygen 1.5.1. (INPUT): Update. (PREDEFINED): Update. (HTML_OUTPUT): Remove html_output_dir, use html. (HTML_STYLESHEET): Remove style.css. * doc/doxygen/tables.html: Remove style.css use. * doc/doxygen/mainpage.html: Nested lists for Namespaces and Classes. * doc/doxygen/doxygroups.cc: Namespace edits. * doc/doxygen/Intro.3: Correct typo. * doc/xml/api.xml: Add gcc-4.3 links. * doc/html/api.html: Regenerate. * include/debug/debug.h: Document namepaces here. * include/parallel/base.h: Same. * include/ext/typelist.h: Same. * include/ext/pb_ds/tag_and_trait.hpp: Same. * include/tr1_impl/random: Adjust line break. * include/tr1_impl/unordered_map: Correct and or add markup. * include/tr1_impl/boost_shared_ptr.h: Correct and or add markup. * include/tr1_impl/functional_hash.h: Same. * include/tr1_impl/cmath: Same. * include/tr1_impl/functional: Same. * include/tr1_impl/unordered_set: Same. * include/tr1_impl/complex: Same. * include/tr1_impl/type_traits: Same. * include/tr1_impl/regex: Same. * include/tr1_impl/array: Same. * include/std/tuple: Same. * include/std/date_time: Same. * include/std/system_error: Same. * include/std/type_traits: Same. * include/ext/enc_filebuf.h: Same. * include/ext/throw_allocator.h: Same. * include/ext/pool_allocator.h: Same. * include/ext/bitmap_allocator.h: Same. * include/ext/concurrence.h: Same. * include/ext/codecvt_specializations.h: Same. * include/ext/stdio_sync_filebuf.h: Same. * include/ext/array_allocator.h: Same. * include/ext/mt_allocator.h: Same. * include/bits/locale_classes.h: Same. * include/bits/locale_facets.h: Same. * include/bits/codecvt.h: Same. * include/bits/char_traits.h: Same. * include/bits/allocator.h: Same. * include/bits/locale_facets_nonio.h: Same. * include/tr1/poly_laguerre.tcc: Same. * include/tr1/riemann_zeta.tcc: Same. * include/tr1/beta_function.tcc: Same. * include/tr1/tuple: Same. * include/tr1/exp_integral.tcc: Same. * include/tr1/gamma.tcc: Same. * include/tr1/hypergeometric.tcc: Same. * include/tr1/modified_bessel_func.tcc: Same. * include/tr1/legendre_function.tcc: Same. * include/tr1/type_traits: Same. * include/tr1/special_function_util.h: Same. * include/tr1/bessel_function.tcc: Same. * include/tr1/cmath: Same. * include/tr1/poly_hermite.tcc: Same. * include/tr1/ell_integral.tcc: Same. * config/abi/compatibility.h: Adjust file name. * testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Adjust line numbers. * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Same. * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: Same. From-SVN: r133544
2008-03-26 06:27:35 +00:00
* http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt12ch32.html
*/
template<typename _Tp,
typename _Poolp = __common_pool_policy<__pool, __thread_default> >
class __mt_alloc : public __mt_alloc_base<_Tp>
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
{
public:
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef _Tp* pointer;
typedef const _Tp* const_pointer;
typedef _Tp& reference;
typedef const _Tp& const_reference;
typedef _Tp value_type;
typedef _Poolp __policy_type;
typedef typename _Poolp::pool_type __pool_type;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
template<typename _Tp1, typename _Poolp1 = _Poolp>
struct rebind
{
typedef typename _Poolp1::template _M_rebind<_Tp1>::other pol_type;
typedef __mt_alloc<_Tp1, pol_type> other;
};
__mt_alloc() throw() { }
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
__mt_alloc(const __mt_alloc&) throw() { }
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
template<typename _Tp1, typename _Poolp1>
mt_allocator.h (__mt_alloc::__mt_alloc): Remove name of unused parameter. 2005-12-26 Chris Jefferson <chris@bubblescope.net> * include/ext/mt_allocator.h (__mt_alloc::__mt_alloc): Remove name of unused parameter. * include/bits/stream_iterator.h (istream_iterator::istream_iterator): Construct _M_value. * include/debug/functions.h (__check_valid_range): Add __attribute__((unused)). * include/tr1/hashtable (hashtable::end): Remove name of unused parameter. * include/tr1/tuple_iterate.h (tuple::tuple): Likewise. (tuple::operator=): Add __attribute__((unused)). * include/tr1/functional (Fnv_hash<4>::hash): Add static_cast. (Fnv_hash<8>::hash): Likewise. * testsuite/25_algorithms/iter_swap/20577.cc (swap): Remove name of unused parameter. * testsuite/25_algorithms/unique_copy/check_type.cc (S2::S2,X2::X2): Likewise. * testsuite/22_locale/ctype/narrow/char/19955.cc (do_narrow): Likewise. * testsuite/22_locale/ctype/is/char/9858.cc (Derived::do_is, Derived::do_scan_is, Derived::do_scan_not, Derived2::do_is, Derived2::do_scan_is, Derived2::do_scan_not): Likewise. * testsuite/22_locale/time_put/put/wchar_t/12439_1.cc (TP::do_put): Likewise. * testsuite/22_locale/time_put/put/wchar_t/12439_3.cc (TP::do_put): Likewise. * testsuite/22_locale/time_put/put/char/12439_1.cc (TP::do_put): Likewise. * testsuite/22_locale/time_put/put/char/12439_3.cc (TP::do_put): Likewise. * testsuite/testsuite_io.h (fail_num_get::do_get, fail_num_put::do_put): Likewise. * testsuite/25_algorithms/find/17441.cc (find): Likewise. * testsuite/23_containers/vector/cons/clear_allocator.cc (clear_alloc::clear_alloc): Likewise. * testsuite/23_containers/vector/bool/clear_allocator.cc (clear_alloc::clear_alloc): Likewise. * testsuite/23_containers/list/cons/clear_allocator.cc (clear_alloc::clear_alloc): Likewise. * testsuite/23_containers/set/modifiers/16728.cc (test_container): Likewise. * testsuite/27_io/basic_ios/cons/char/3.cc (char_traits::to_char_type, to_int_type): Likewise. * testsuite/27_io/basic_filebuf/imbue/12206.cc (codecvt::do_out, do_in, do_unshift, do_length): Likewise. * testsuite/21_strings/basic_string/capacity/1.cc (operator==(A<T>,A<T>), operator<(A<T>,A<T>), char_traits::to_char_type, char_traits::to_int_type): Likewise * testsuite/testsuite_character.h (ctype::do_is, ctype::do_scan_is, ctype::do_scan_not, do_toupper, do_tolower): Likewise. * testsuite/25_algorithms/replace_copy/check_type.cc (Z::operator=): Add missing return statement. * testsuite/25_algorithms/replace_copy_if/check_type.cc (Z::operator=): Likewise. * testsuite/testsuite_iterators.h (output_iterator_wrapper::operator=, random_access_iterator_wrapper::operator==): Likewise. * testsuite/20_util/functional/binders/1.cc (s::f_int_int_const, s::f_int_int, s::f_int_void_const, s::f_int_void): Likewise. * testsuite/27_io/types/1.cc (test01): Likewise. * testsuite/27_io/basic_ostream/write/wchar_t/1.cc (test01): Likewise. * testsuite/27_io/basic_ostream/write/char/1.cc (test01): Likewise. * testsuite/21_strings/c_strings/wchar_t/24559.cc (main): Likewise. * testsuite/27_io/basic_istream/ignore/wchar_t/2.cc (check): Add static cast. * testsuite/27_io/basic_istream/ignore/char/2.cc (check): Likewise. * testsuite/27_io/basic_istream/getline/wchar_t/5.cc (check): Likewise. * testsuite/27_io/basic_istream/getline/char/5.cc (check): Likewise. * testsuite/testsuite_allocator.h (check_new): Likewise. (check_deallocate_null): Add missing return value. * testsuite/ext/pool_allocator/allocate_chunk.cc (test01): Make variable unsigned. * testsuite/23_containers/vector/modifiers/erase/1.cc (N,N1,N2,N3,N4, N5,test01): Likewise. * testsuite/26_numerics/valarray/valarray_subset_assignment.cc (check_array): Likewise. (main): Removed unused variable. * testsuite/27_io/basic_streambuf/in_avail/wchar_t/1.cc (test05): Removed unused variable. * testsuite/27_io/basic_ostream/flush/wchar_t/1.cc (test01): Likewise. * testsuite/27_io/basic_ostream/flush/char/1.cc (test01): Likewise. * testsuite/27_io/basic_ostream/endl/wchar_t/1.cc (test01): Likewise. * testsuite/27_io/basic_ostream/endl/char/1.cc (test01): Likewise. * testsuite/27_io/basic_ostream/ends/wchar_t/1.cc (test01): Likewise. * testsuite/27_io/basic_ostream/ends/char/1.cc (test01): Likewise. * testsuite/tr1/2_general_utilities/memory/shared_ptr/ assign/shared_ptr.cc (test01): Correct return type. * testsuite/27_io/basic_filebuf/close/char/2.cc (test_02): Add default value to close_num. From-SVN: r109062
2005-12-26 10:53:42 +00:00
__mt_alloc(const __mt_alloc<_Tp1, _Poolp1>&) throw() { }
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
~__mt_alloc() throw() { }
pointer
allocate(size_type __n, const void* = 0);
void
deallocate(pointer __p, size_type __n);
const __pool_base::_Tune
_M_get_options()
{
// Return a copy, not a reference, for external consumption.
return __policy_type::_S_get_pool()._M_get_options();
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
}
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
void
_M_set_options(__pool_base::_Tune __t)
{ __policy_type::_S_get_pool()._M_set_options(__t); }
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
};
template<typename _Tp, typename _Poolp>
typename __mt_alloc<_Tp, _Poolp>::pointer
__mt_alloc<_Tp, _Poolp>::
allocate(size_type __n, const void*)
{
if (__builtin_expect(__n > this->max_size(), false))
std::__throw_bad_alloc();
__policy_type::_S_initialize_once();
// Requests larger than _M_max_bytes are handled by operator
// new/delete directly.
__pool_type& __pool = __policy_type::_S_get_pool();
const size_t __bytes = __n * sizeof(_Tp);
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
if (__pool._M_check_threshold(__bytes))
{
void* __ret = ::operator new(__bytes);
return static_cast<_Tp*>(__ret);
}
// Round up to power of 2 and figure out which bin to use.
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
const size_t __which = __pool._M_get_binmap(__bytes);
const size_t __thread_id = __pool._M_get_thread_id();
// Find out if we have blocks on our freelist. If so, go ahead
// and use them directly without having to lock anything.
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
char* __c;
typedef typename __pool_type::_Bin_record _Bin_record;
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
const _Bin_record& __bin = __pool._M_get_bin(__which);
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
if (__bin._M_first[__thread_id])
{
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
// Already reserved.
typedef typename __pool_type::_Block_record _Block_record;
_Block_record* __block = __bin._M_first[__thread_id];
__bin._M_first[__thread_id] = __block->_M_next;
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
__pool._M_adjust_freelist(__bin, __block, __thread_id);
__c = reinterpret_cast<char*>(__block) + __pool._M_get_align();
}
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
else
{
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
// Null, reserve.
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
__c = __pool._M_reserve_block(__bytes, __thread_id);
}
return static_cast<_Tp*>(static_cast<void*>(__c));
}
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
template<typename _Tp, typename _Poolp>
void
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
__mt_alloc<_Tp, _Poolp>::
deallocate(pointer __p, size_type __n)
{
if (__builtin_expect(__p != 0, true))
{
// Requests larger than _M_max_bytes are handled by
// operators new/delete directly.
__pool_type& __pool = __policy_type::_S_get_pool();
const size_t __bytes = __n * sizeof(_Tp);
if (__pool._M_check_threshold(__bytes))
::operator delete(__p);
else
__pool._M_reclaim_block(reinterpret_cast<char*>(__p), __bytes);
}
}
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
template<typename _Tp, typename _Poolp>
inline bool
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
operator==(const __mt_alloc<_Tp, _Poolp>&, const __mt_alloc<_Tp, _Poolp>&)
{ return true; }
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
template<typename _Tp, typename _Poolp>
inline bool
re PR libstdc++/16614 (Excessive resource usage in __mt_alloc) 2004-09-01 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/16614 * include/ext/mt_allocator.h (__mt_base): Not type dependent, split into.. (__pool): New, specialize. (__common_pool): New, static bits here. (__per_type_pool): New, and here. (__mt_alloc_base): New. (__mt_alloc): Add template parameter, inherit from it. * src/allocator.cc: Split this... * src/allocator-inst.cc: And this... * src/pool_allocator.cc: ...into this. * src/mt_allocator.cc: ... and this. Add definitions for __mt_base. * src/Makefile.am (sources): Split allocator.cc to pool_allocator.cc and mt_allocator.cc. * src/Makefile.in: Regenerate. * config/linker-map.gnu: Add symbols. * docs/html/ext/mt_allocator.html: Document new design. * testsuite/ext/mt_allocator/tune-1.cc: New. * testsuite/ext/mt_allocator/tune-2.cc: New. * testsuite/ext/mt_allocator/tune-3.cc: New. * testsuite/ext/mt_allocator/tune-4.cc: New. * testsuite/testsuite_allocator.h (__gnu_test::check_new): New. * testsuite/ext/allocators.cc: Use check_new, split into... * testsuite/ext/mt_allocator/check_new.cc: this. * testsuite/ext/pool_allocator/check_new.cc: this. * testsuite/ext/malloc_allocator/check_new.cc: this. * testsuite/ext/debug_allocator/check_new.cc: this. * testsuite/ext/mt_allocator/instantiate.cc: this. * testsuite/ext/pool_allocator/instantiate.cc: this. * testsuite/ext/malloc_allocator/instantiate.cc: this. * testsuite/ext/debug_allocator/instantiate.cc: this. From-SVN: r86936
2004-09-01 22:17:00 +00:00
operator!=(const __mt_alloc<_Tp, _Poolp>&, const __mt_alloc<_Tp, _Poolp>&)
{ return false; }
re PR libstdc++/17780 (std::allocator vs. static init) 2004-10-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/17780 * include/ext/mt_allocator.h (__pool_base::_Tune): Add default options as compile-time constant enums. (__pool_base::_Tune::is_default): New. (__pool_base::_Block_address): New. (__pool_base): Rearrange data members. (__pool::_M_reserve_memory): To _M_reserve_block. (__pool::_M_reclaim_memory): To _M_reclaim_block. (__pool::_Bin_record): Add _Block_address data member. (__pool<false>): Add _M_thread_freelist_initial. (__pool::~__pool): Declare. (__common_pool_policy): Move static data member to... (__common_pool_policy::_S_get_pool): ...here, make static local. (__per_type_pool_policy): Move static data member to... (__per_type_pool_policy::_S_get_pool): ...here, make static local. (__mt_alloc::__mt_alloc): Call __policy_type::_S_get_pool. Remove static member definitions. Use define for __default_policy. * src/mt_allocator.cc: Same. * config/linker-map.gnu: Don't export _S_get_pool. Renames. * testsuite/ext/new_allocator: New. * testsuite/ext/new_allocator/instantiate.cc: New. * testsuite/ext/new_allocator/check_new.cc: New. * testsuite/ext/new_allocator/deallocate_global.cc: New. * testsuite/ext/new_allocator/deallocate_local.cc: New. * testsuite/ext/mt_allocator/instantiate.cc: Instantiate all template arguments. * testsuite/ext/mt_allocator/deallocate_global-1.cc: New. * testsuite/ext/mt_allocator/deallocate_global-2.cc: New. * testsuite/ext/mt_allocator/deallocate_global-3.cc: New. * testsuite/ext/mt_allocator/deallocate_global-4.cc: New. * testsuite/ext/mt_allocator/deallocate_local-1.cc: New. * testsuite/ext/mt_allocator/deallocate_local-2.cc: New. * testsuite/ext/mt_allocator/deallocate_local-3.cc: New. * testsuite/ext/mt_allocator/deallocate_local-4.cc: New. * testsuite/ext/mt_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate.cc: New. * testsuite/ext/malloc_allocator/deallocate_global.cc: New. * testsuite/ext/malloc_allocator/deallocate_local.cc: New. From-SVN: r88589
2004-10-06 04:22:42 +00:00
#undef __thread_default
c++config: Add in revised namespace associations. 2005-12-18 Benjamin Kosnik <bkoz@redhat.com> * include/bits/c++config: Add in revised namespace associations. _GLIBCXX_BEGIN_NAMESPACE: New macro. _GLIBCXX_END_NAMESPACE: Same. _GLIBCXX_BEGIN_NESTED_NAMESPACE: Same. _GLIBCXX_END_NESTED_NAMESPACE: Same. * acinclude.m4 (GLIBCXX_ENABLE_SYMVERS]): Add gnu-versioned-namespace. * configure: Regenerated. * config.h.in: Same. * config/abi/pre/gnu-versioned-namespace.ver: New. * config/abi/pre/gnu.ver (GLIBCXX_3.4.7): Add exports for nested debug mode items. * include/Makefile.am (${host_builddir}/c++config.h): Fill in values for __GLIBCXX__ and _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION. * include/Makefile.in: Regnerate. * src/compatibility.cc: Alias new, nested definitions to exported symbols from non-nested __gnu_debug. * src/Makefile.am: Add in ENABLE_SYMVERS_GNU_NAMESPACE. * src/Makefile.in: Regenerate. * docs/html/debug_mode.html: Revise for nested design. * docs/html/debug.html: Use debug qualifications instead of __gnu_debug. * docs/html/configopts.html: Revise documentation for --enable-symvers. * include/debug/formatter: Simplify namespace qualifications for current, nested-only reality. Add top-level namespace alias, namespace debug, for debug-mode containers. * include/debug/safe_iterator.h: Same. * include/debug/set.h: Same. * include/debug/hash_multimap.h: Same. * include/debug/hash_set.h: Same. * include/debug/bitset * include/debug/safe_sequence.h: Same. * include/debug/multiset.h: Same. * include/debug/safe_base.h: Same. * include/debug/functions.h: Same. * include/debug/safe_iterator.tcc * include/debug/hash_multiset.h: Same. * include/debug/vector * include/debug/map.h: Same. * include/debug/deque * include/debug/hash_map.h: Same. * include/debug/string * include/debug/macros.h: Same. * include/debug/list * include/debug/debug.h: Same. * include/debug/multimap.h: Same. * src/debug.cc: Same. * testsuite/23_containers/vector/invalidation/1.cc: Cleanups. * testsuite/23_containers/vector/invalidation/2.cc: Same. * testsuite/23_containers/vector/invalidation/3.cc: Same. * testsuite/23_containers/vector/invalidation/4.cc: Same. * testsuite/23_containers/deque/invalidation/1.cc: Same. * testsuite/23_containers/deque/invalidation/2.cc: Same. * testsuite/23_containers/deque/invalidation/3.cc: Same. * testsuite/23_containers/deque/invalidation/4.cc: Same. * testsuite/23_containers/multiset/invalidation/1.cc: Same. * testsuite/23_containers/multiset/invalidation/2.cc: Same. * testsuite/23_containers/multimap/invalidation/1.cc: Same. * testsuite/23_containers/multimap/invalidation/2.cc: Same. * testsuite/23_containers/bitset/invalidation/1.cc: Same. * testsuite/23_containers/bitset/cons/16020.cc: Same. * testsuite/23_containers/bitset/operations/13838.cc: Same. * testsuite/23_containers/list/invalidation/1.cc: Same. * testsuite/23_containers/list/invalidation/2.cc: Same. * testsuite/23_containers/list/invalidation/3.cc: Same. * testsuite/23_containers/list/invalidation/4.cc: Same. * testsuite/23_containers/set/invalidation/1.cc: Same. * testsuite/23_containers/set/invalidation/2.cc: Same. * testsuite/23_containers/map/invalidation/1.cc: Same. * testsuite/23_containers/map/invalidation/2.cc: Same. * testsuite/23_containers/map/insert/16813.cc: Same. * include/bits/basic_ios.h: Use _GLIBCXX_BEGIN_NAMESPACE(std) and friends. * include/bits/stl_list.h: Same. * include/bits/stl_map.h: Same. * include/bits/stl_algobase.h: Same. * include/bits/localefwd.h: Same. * include/bits/valarray_array.tcc: Same. * include/bits/valarray_after.h: Same. * include/bits/gslice_array.h: Same. * include/bits/stl_queue.h: Same. * include/bits/gslice.h: Same. * include/bits/locale_facets.tcc: Same. * include/bits/locale_classes.h: Same. * include/bits/stl_set.h: Same. * include/bits/locale_facets.h: Same. * include/bits/stl_stack.h: Same. * include/bits/stl_iterator_base_types.h: Same. * include/bits/stl_heap.h: Same. * include/bits/indirect_array.h: Same. * include/bits/atomicity.h: Same. * include/bits/stream_iterator.h: Same. * include/bits/concurrence.h: Same. * include/bits/basic_string.h: Same. * include/bits/stl_multimap.h: Same. * include/bits/stl_pair.h: Same. * include/bits/basic_ios.tcc: Same. * include/bits/stl_raw_storage_iter.h: Same. * include/bits/stl_vector.h: Same. * include/bits/stl_numeric.h: Same. * include/bits/ios_base.h: Same. * include/bits/stl_deque.h: Same. * include/bits/istream.tcc: Same. * include/bits/postypes.h: Same. * include/bits/stl_multiset.h: Same. * include/bits/mask_array.h: Same. * include/bits/stl_uninitialized.h: Same. * include/bits/ostream.tcc: Same. * include/bits/slice_array.h: Same. * include/bits/boost_concept_check.h: Same. * include/bits/sstream.tcc: Same. * include/bits/stl_iterator_base_funcs.h: Same. * include/bits/char_traits.h: Same. * include/bits/stl_algo.h: Same. * include/bits/stringfwd.h: Same. * include/bits/c++config * include/bits/stl_iterator.h: Same. * include/bits/valarray_array.h: Same. * include/bits/stl_tempbuf.h: Same. * include/bits/vector.tcc: Same. * include/bits/deque.tcc: Same. * include/bits/stl_bvector.h: Same. * include/bits/basic_string.tcc: Same. * include/bits/list.tcc: Same. * include/bits/streambuf_iterator.h: Same. * include/bits/valarray_before.h: Same. * include/bits/stl_construct.h: Same. * include/bits/stl_function.h: Same. * include/bits/cpp_type_traits.h: Same. * include/bits/streambuf.tcc: Same. * include/bits/allocator.h: Same. * include/bits/stl_tree.h: Same. * include/bits/fstream.tcc: Same. * include/bits/stl_relops.h: Same. * include/bits/functexcept.h: Same. * include/std/std_valarray.h: Same. * include/std/std_iostream.h: Same. * include/std/std_streambuf.h: Same. * include/std/std_bitset.h: Same. * include/std/std_iosfwd.h: Same. * include/std/std_iomanip.h: Same. * include/std/std_fstream.h: Same. * include/std/std_limits.h: Same. * include/std/std_stdexcept.h: Same. * include/std/std_istream.h: Same. * include/std/std_complex.h: Same. * include/std/std_memory.h: Same. * include/std/std_ostream.h: Same. * include/std/std_sstream.h: Same. * include/c_std/std_csignal.h: Same. * include/c_std/std_cstdlib.h: Same. * include/c_std/std_cstdio.h: Same. * include/c_std/std_cstdarg.h: Same. * include/c_std/std_cctype.h: Same. * include/c_std/std_cmath.h: Same. * include/c_std/std_ctime.h: Same. * include/c_std/std_clocale.h: Same. * include/c_std/std_csetjmp.h: Same. * include/c_std/std_cwchar.h: Same. * include/c_std/std_cstring.h: Same. * include/c_std/std_cstddef.h: Same. * include/c_std/std_cwctype.h: Same. * include/backward/iterator.h: Same. * include/backward/set.h: Same. * include/backward/hashtable.h: Same. * include/backward/fstream.h: Same. * include/backward/tempbuf.h: Same. * include/backward/istream.h: Same. * include/backward/bvector.h: Same. * include/backward/stack.h: Same. * include/backward/rope.h: Same. * include/backward/complex.h: Same. * include/backward/ostream.h: Same. * include/backward/heap.h: Same. * include/backward/iostream.h: Same. * include/backward/function.h: Same. * include/backward/multimap.h: Same. * include/backward/pair.h: Same. * include/backward/stream.h: Same. * include/backward/iomanip.h: Same. * include/backward/strstream * include/backward/slist.h: Same. * include/backward/tree.h: Same. * include/backward/vector.h: Same. * include/backward/deque.h: Same. * include/backward/multiset.h: Same. * include/backward/list.h: Same. * include/backward/map.h: Same. * include/backward/algobase.h: Same. * include/backward/hash_map.h: Same. * include/backward/algo.h: Same. * include/backward/queue.h: Same. * include/backward/streambuf.h: Same. * src/allocator-inst.cc: Same. * src/complex_io.cc: Same. * src/localename.cc: Same. * src/limits.cc: Same. * src/ios_failure.cc: Same. * src/locale-misc-inst.cc: Same. * src/streambuf-inst.cc: Same. * src/misc-inst.cc: Same. * src/concept-inst.cc: Same. * src/ios_locale.cc: Same. * src/pool_allocator.cc: Same. * src/fstream-inst.cc: Same. * src/istream-inst.cc: Same. * src/string-inst.cc: Same. * src/locale_init.cc: Same. * src/ctype.cc: Same. * src/strstream.cc: Same. * src/ostream-inst.cc: Same. * src/functexcept.cc: Same. * src/streambuf.cc: Same. * src/sstream-inst.cc: Same. * src/ios.cc: Same. * src/valarray-inst.cc: Same. * src/locale.cc: Same. * src/tree.cc: Same. * src/stdexcept.cc: Same. * src/istream.cc: Same. * src/compatibility.cc: Same. * src/locale-inst.cc: Same. * src/globals_io.cc: Same. * src/list.cc: Same. * src/ios_init.cc: Same. * src/locale_facets.cc: Same. * src/codecvt.cc: Same. * include/tr1/unordered_map: Use _GLIBCXX_BEGIN_NAMESPACE(tr1). * include/tr1/boost_shared_ptr.h: Same. * include/tr1/tuple * include/tr1/hashtable * include/tr1/type_traits_fwd.h: Same. * include/tr1/unordered_set * include/tr1/functional * include/tr1/ref_fwd.h: Same. * include/tr1/utility * include/tr1/type_traits * include/tr1/array * include/ext/hashtable.h: Use _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx). * include/ext/typelist.h: Same. * include/ext/hash_map: Same. * include/ext/rc_string_base.h: Same. * include/ext/pool_allocator.h: Same. * include/ext/iterator: Same. * include/ext/rb_tree: Same. * include/ext/numeric: Same. * include/ext/vstring.tcc: Same. * include/ext/sso_string_base.h: Same. * include/ext/stdio_filebuf.h: Same. * include/ext/algorithm: Same. * include/ext/codecvt_specializations.h: Same. * include/ext/new_allocator.h: Same. * include/ext/array_allocator.h: Same. * include/ext/vstring_util.h: Same. * include/ext/vstring_fwd.h: Same. * include/ext/mt_allocator.h: Same. * include/ext/debug_allocator.h: Same. * include/ext/slist: Same. * include/ext/stdio_sync_filebuf.h: Same. * include/ext/hash_fun.h: Same. * include/ext/malloc_allocator.h: Same. * include/ext/functional: Same. * include/ext/bitmap_allocator.h: Same. * include/ext/pod_char_traits.h: Same. * include/ext/vstring.h: Same. * include/ext/ropeimpl.h: Same. * include/ext/hash_set: Same. * include/ext/memory: Same. * include/ext/rope: Same. * include/bits/boost_concept_check.h: Same. * include/bits/stl_iterator.h: Same. * include/bits/char_traits.h: Same. * include/bits/cpp_type_traits.h: Same. * include/bits/concurrence.h: Same. * include/bits/atomicity.h: Same. * config/locale/gnu/numeric_members.cc: Same. * config/locale/gnu/collate_members.cc: Same. * config/locale/gnu/ctype_members.cc: Same. * config/locale/gnu/c_locale.cc: Same. * config/locale/gnu/codecvt_members.cc: Same. * config/locale/gnu/messages_members.cc: Same. * config/locale/gnu/c_locale.h: Same. * config/locale/gnu/monetary_members.cc: Same. * config/locale/gnu/time_members.cc: Same. * config/locale/ieee_1003.1-2001/c_locale.h: Same. * config/locale/generic/numeric_members.cc: Same. * config/locale/generic/collate_members.cc: Same. * config/locale/generic/ctype_members.cc: Same. * config/locale/generic/c_locale.cc: Same. * config/locale/generic/codecvt_members.cc: Same. * config/locale/generic/messages_members.cc: Same. * config/locale/generic/c_locale.h: Same. * config/locale/generic/monetary_members.cc: Same. * config/locale/generic/time_members.cc: Same. * config/os/aix/atomicity.h: Same. * config/os/irix/atomicity.h: Same. * config/cpu/powerpc/atomicity.h: Same. * config/cpu/cris/atomicity.h: Same. * config/cpu/ia64/atomicity.h: Same. * config/cpu/alpha/atomicity.h: Same. * config/cpu/m68k/atomicity.h: Same. * config/cpu/hppa/atomicity.h: Same. * config/cpu/mips/atomicity.h: Same. * config/cpu/sparc/atomicity.h: Same. * config/cpu/i386/atomicity.h: Same. * config/cpu/i486/atomicity.h: Same. * config/cpu/sh/atomicity.h: Same. * config/cpu/generic/atomicity.h: Same. * config/cpu/s390/atomicity.h: Same. * config/io/c_io_stdio.h: Same. * config/io/basic_file_stdio.cc: Same. * config/io/basic_file_stdio.h: Same. * src/misc-inst.cc: Same. * src/concept-inst.cc: Same. * src/ext-inst.cc: Same. * src/string-inst.cc: Same. * src/pool_allocator.cc: Same. * src/bitmap_allocator.cc: Same. * src/mt_allocator.cc: Same. * libsupc++/exception: Same. * libsupc++/vterminate.cc: Same. * testsuite/ext/hash_map/1.cc: Explicitly qualify __gnu_cxx::hash_map. * testsuite/ext/hash_map/14648.cc: Same. * libsupc++/eh_alloc.cc: Correct comment line spacing. From-SVN: r108775
2005-12-19 00:56:05 +00:00
_GLIBCXX_END_NAMESPACE
#endif