diff options
author | Ulrich Drepper <drepper@redhat.com> | 2001-11-28 23:35:29 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2001-11-28 23:35:29 +0000 |
commit | c6baa867d3d57ca3eb89226b44ad696960d869cd (patch) | |
tree | 65612b8dabc1e9d2b0f957290c8076eae741d895 /libio/genops.c | |
parent | cf6a2367e82ba5b322baf0fc0caa5d57e799c72d (diff) | |
download | glibc-c6baa867d3d57ca3eb89226b44ad696960d869cd.tar.gz glibc-c6baa867d3d57ca3eb89226b44ad696960d869cd.tar.xz glibc-c6baa867d3d57ca3eb89226b44ad696960d869cd.zip |
Update.
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.
Diffstat (limited to 'libio/genops.c')
-rw-r--r-- | libio/genops.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/libio/genops.c b/libio/genops.c index d786ebca57..2398cff684 100644 --- a/libio/genops.c +++ b/libio/genops.c @@ -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 () { |