]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR libstdc++/7445 (poor performance of std::locale::classic() in multi-threaded...
authorBenjamin Kosnik <bkoz@redhat.com>
Thu, 15 Aug 2002 22:51:02 +0000 (22:51 +0000)
committerBenjamin Kosnik <bkoz@gcc.gnu.org>
Thu, 15 Aug 2002 22:51:02 +0000 (22:51 +0000)
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: r56366

libstdc++-v3/ChangeLog
libstdc++-v3/docs/html/17_intro/TODO
libstdc++-v3/include/bits/fstream.tcc
libstdc++-v3/include/ext/stdio_filebuf.h
libstdc++-v3/src/locale.cc

index a4414c30d17b4b82380cac61c8c1a8901378bae9..344881c9a5e5ad479205d38823453d6a2ea96156 100644 (file)
@@ -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  Danny Smith  <dannysmith@users.sourceforge.net>
             Benjamin Kosnik  <bkoz@redhat.com>
        
index c7a2ecbe24e620676cf993ce103f2fb221d6147d..2ba36ad10a3b6956c3ba69f6f88b5b9f138c2bcc 100644 (file)
@@ -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>. 
index 2caeb6e5e5815cfe34b759fe36b22e3d7c654504..18dbaf1caae8b6915e88feebfce289f4e0ed6c7a 100644 (file)
@@ -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)
        {
index cd869a8db325449df5cb116564ffe43a74b07fbf..59ab41a03e559136ca10ebb42dc110e4e51f0ff4 100644 (file)
@@ -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();
        }
     }
index 3c755bbcba4dbdd5eba3618798e33a7389782841..3cb9d1b4cbfd1f569b700add610f38263c66b364 100644 (file)
@@ -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.