re PR libstdc++/7445 (poor performance of std::locale::classic() in multi-threaded applications)
2002-08-15 Benjamin Kosnik <bkoz@redhat.com> * include/ext/stdio_filebuf.h (stdio_filebuf): Explicitly set _M_buf_size_opt to zero when unbuffering. * include/bits/fstream.tcc (filebuf::showmanyc): Simplify. Consistency checks for _M_buf_size_opt. Revert PR libstdc++/7445 * src/locale.cc (locale::classic): Revert. * docs/html/17_intro/TODO: Add. From-SVN: r56365
This commit is contained in:
parent
204250d2fc
commit
6e52332ec7
5 changed files with 40 additions and 21 deletions
|
@ -1,3 +1,15 @@
|
|||
2002-08-15 Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
* include/ext/stdio_filebuf.h (stdio_filebuf): Explicitly set
|
||||
_M_buf_size_opt to zero when unbuffering.
|
||||
* include/bits/fstream.tcc (filebuf::showmanyc): Simplify.
|
||||
Consistency checks for _M_buf_size_opt.
|
||||
|
||||
Revert PR libstdc++/7445
|
||||
* src/locale.cc (locale::classic): Revert.
|
||||
|
||||
* docs/html/17_intro/TODO: Add.
|
||||
|
||||
2002-08-15 Phil Edwards <pme@gcc.gnu.org>
|
||||
|
||||
* docs/html/documentation.html: Update doxygen links for 3.2.
|
||||
|
|
|
@ -17,7 +17,16 @@ executable speed.
|
|||
|
||||
- benchmarking addition to the testsuite that does the above.
|
||||
|
||||
- implement symbol versioning for ELF targets.
|
||||
- implement testing for symbol versioning for ELF targets.
|
||||
|
||||
- review streambuf, filebuf, stringbuf to optimize data member
|
||||
placement. Do pback bits need to be in streambuf? How about
|
||||
_M_set_indeterminate, etc?
|
||||
|
||||
- Think about naming all member data and member functions consistently
|
||||
as per
|
||||
funtions: _M_verb_adverb
|
||||
data: _M_noun_adjective
|
||||
|
||||
- exception specifications need to be reviewed for all parts of the
|
||||
library support and utility areas, particularly <new>.
|
||||
|
|
|
@ -90,9 +90,8 @@ namespace std
|
|||
{
|
||||
_M_allocate_internal_buffer();
|
||||
_M_mode = __mode;
|
||||
|
||||
// For time being, set both (in/out) sets of pointers.
|
||||
_M_set_indeterminate();
|
||||
|
||||
if ((__mode & ios_base::ate)
|
||||
&& this->seekoff(0, ios_base::end, __mode) < 0)
|
||||
this->close();
|
||||
|
@ -147,12 +146,7 @@ namespace std
|
|||
bool __testin = _M_mode & ios_base::in;
|
||||
|
||||
if (__testin && this->is_open())
|
||||
{
|
||||
if (_M_in_cur < _M_in_end)
|
||||
__ret = _M_in_end - _M_in_cur;
|
||||
else
|
||||
__ret = 0;
|
||||
}
|
||||
__ret = _M_in_end - _M_in_cur;
|
||||
_M_last_overflowed = false;
|
||||
return __ret;
|
||||
}
|
||||
|
@ -316,7 +310,7 @@ namespace std
|
|||
{
|
||||
int_type __ret = traits_type::eof();
|
||||
bool __testput = _M_out_cur && _M_out_beg < _M_out_end;
|
||||
bool __testunbuffered = _M_file.is_open() && !_M_buf_size;
|
||||
bool __testunbuffered = _M_file.is_open() && !_M_buf_size_opt;
|
||||
|
||||
if (__testput || __testunbuffered)
|
||||
{
|
||||
|
|
|
@ -123,16 +123,18 @@ namespace __gnu_cxx
|
|||
if (this->is_open())
|
||||
{
|
||||
_M_mode = __mode;
|
||||
_M_buf_size_opt = __size;
|
||||
|
||||
if (__size > 0 && __size < 4)
|
||||
{
|
||||
// Specify unbuffered.
|
||||
_M_buf = _M_unbuf;
|
||||
_M_buf_size = __size;
|
||||
_M_buf_size_opt = 0;
|
||||
}
|
||||
else
|
||||
_M_allocate_internal_buffer();
|
||||
|
||||
{
|
||||
_M_buf_size_opt = __size;
|
||||
_M_allocate_internal_buffer();
|
||||
}
|
||||
_M_set_indeterminate();
|
||||
}
|
||||
}
|
||||
|
@ -146,16 +148,18 @@ namespace __gnu_cxx
|
|||
if (this->is_open())
|
||||
{
|
||||
_M_mode = __mode;
|
||||
_M_buf_size_opt = __size;
|
||||
|
||||
if (__size > 0 && __size < 4)
|
||||
{
|
||||
// Specify unbuffered.
|
||||
_M_buf = _M_unbuf;
|
||||
_M_buf_size = __size;
|
||||
_M_buf_size_opt = 0;
|
||||
}
|
||||
else
|
||||
_M_allocate_internal_buffer();
|
||||
|
||||
{
|
||||
_M_buf_size_opt = __size;
|
||||
_M_allocate_internal_buffer();
|
||||
}
|
||||
_M_set_indeterminate();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -284,11 +284,11 @@ namespace std
|
|||
const locale&
|
||||
locale::classic()
|
||||
{
|
||||
static _STL_mutex_lock __lock __STL_MUTEX_INITIALIZER;
|
||||
_STL_auto_lock __auto(__lock);
|
||||
|
||||
if (!_S_classic)
|
||||
{
|
||||
static _STL_mutex_lock __lock __STL_MUTEX_INITIALIZER;
|
||||
_STL_auto_lock __auto(__lock);
|
||||
|
||||
try
|
||||
{
|
||||
// 26 Standard facets, 2 references.
|
||||
|
|
Loading…
Add table
Reference in a new issue