Update.
authorUlrich Drepper <drepper@redhat.com>
Wed, 28 Nov 2001 23:35:29 +0000 (23:35 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 28 Nov 2001 23:35:29 +0000 (23:35 +0000)
2001-11-28  Ulrich Drepper  <drepper@redhat.com>

* libio/genops.c (_IO_flush_all_lockp): New function.  The same code
as the old _IO_flush_all but lock only if parameter is nonzero.
(_IO_flush_all): Call _IO_flush_all_lockp with 1 as parameter.
* libio/libioP.h: Add prototype for _IO_flush_all_lockp.
* sysdeps/generic/abort.c (fflush): Define to _IO_flush_all_lockp(0)
if libio is used.

ChangeLog
libio/genops.c
libio/libioP.h
sysdeps/generic/abort.c

index 5e63a34..4194944 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2001-11-28  Ulrich Drepper  <drepper@redhat.com>
+
+       * libio/genops.c (_IO_flush_all_lockp): New function.  The same code
+       as the old _IO_flush_all but lock only if parameter is nonzero.
+       (_IO_flush_all): Call _IO_flush_all_lockp with 1 as parameter.
+       * libio/libioP.h: Add prototype for _IO_flush_all_lockp.
+       * sysdeps/generic/abort.c (fflush): Define to _IO_flush_all_lockp(0)
+       if libio is used.
+
 2001-11-28  Jakub Jelinek  <jakub@redhat.com>
 
        * sysdeps/sparc/fpu/bits/mathinline.h (__signbitf, __signbit,
index d786ebc..2398cff 100644 (file)
@@ -784,7 +784,7 @@ _IO_get_column (fp)
 
 
 int
-_IO_flush_all ()
+_IO_flush_all_lockp (int do_lock)
 {
   int result = 0;
   struct _IO_FILE *fp;
@@ -792,7 +792,8 @@ _IO_flush_all ()
 
 #ifdef _IO_MTSAFE_IO
   _IO_cleanup_region_start_noarg (flush_cleanup);
-  _IO_lock_lock (list_all_lock);
+  if (do_lock)
+    _IO_lock_lock (list_all_lock);
 #endif
 
   last_stamp = _IO_list_all_stamp;
@@ -800,7 +801,8 @@ _IO_flush_all ()
   while (fp != NULL)
     {
       run_fp = fp;
-      _IO_flockfile (fp);
+      if (do_lock)
+       _IO_flockfile (fp);
 
       if (((fp->_mode <= 0 && fp->_IO_write_ptr > fp->_IO_write_base)
 #if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
@@ -812,7 +814,8 @@ _IO_flush_all ()
          && _IO_OVERFLOW (fp, EOF) == EOF)
        result = EOF;
 
-      _IO_funlockfile (fp);
+      if (do_lock)
+       _IO_funlockfile (fp);
       run_fp = NULL;
 
       if (last_stamp != _IO_list_all_stamp)
@@ -826,13 +829,22 @@ _IO_flush_all ()
     }
 
 #ifdef _IO_MTSAFE_IO
-  _IO_lock_unlock (list_all_lock);
+  if (do_lock)
+    _IO_lock_unlock (list_all_lock);
   _IO_cleanup_region_end (0);
 #endif
 
   return result;
 }
 
+
+int
+_IO_flush_all ()
+{
+  /* We want locking.  */
+  return _IO_flush_all_lockp (1);
+}
+
 void
 _IO_flush_all_linebuffered ()
 {
index 9a336fb..3a32caa 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1993,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -426,6 +426,7 @@ extern int _IO_do_write __P ((_IO_FILE *, const char *, _IO_size_t));
 extern int _IO_new_do_write __P ((_IO_FILE *, const char *, _IO_size_t));
 extern int _IO_old_do_write __P ((_IO_FILE *, const char *, _IO_size_t));
 extern int _IO_wdo_write __P ((_IO_FILE *, const wchar_t *, _IO_size_t));
+extern int _IO_flush_all_lockp __P ((int));
 extern int _IO_flush_all __P ((void));
 extern int _IO_cleanup __P ((void));
 extern void _IO_flush_all_linebuffered __P ((void));
index 153faa1..665bac6 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 93, 95, 96, 97, 98 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 93, 95, 96, 97, 98, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -33,7 +33,7 @@
 
 #ifdef USE_IN_LIBIO
 # include <libio/iolibio.h>
-# define fflush(s) _IO_fflush (s)
+# define fflush(s) _IO_flush_all_lockp (0)
 #endif
 
 /* We must avoid to run in circles.  Therefore we remember how far we