diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 4598b25903ef99b1e18c4c336df0b3daf1e3be37..acc46b7349b5934d416dfa4739ad98c5cb18b6ae 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,11 @@
+2004-09-17  Paolo Carlini  <pcarlini@suse.de>
+	    Andrea Arcangeli  <andrea@suse.de>
+
+	* config/io/basic_file_stdio.cc (__basic_file<>::close)): Don't
+	call unnecessarily sync, that is fflush: the library, since 3.4.0
+	does not use buffered fread/fwrite.
+	* include/bits/fstream.tcc (basic_filebuf<>::overflow): Likewise.
+
 2004-09-15  Mark Mitchell  <mark@codesourcery.com>
 
 	* config/cpu/arm/cxxabi_tweaks.h (__cxa_cdtor_return_type):
diff --git a/libstdc++-v3/config/io/basic_file_stdio.cc b/libstdc++-v3/config/io/basic_file_stdio.cc
index 680220bc4c582766c76e35bb1c20217a4b99b5b7..0a4e154ebbc9c054c953cc076a27775ef08f33d6 100644
--- a/libstdc++-v3/config/io/basic_file_stdio.cc
+++ b/libstdc++-v3/config/io/basic_file_stdio.cc
@@ -259,23 +259,21 @@ namespace std
     __basic_file* __ret = static_cast<__basic_file*>(NULL);
     if (this->is_open())
       {
-	// In general, no need to zero errno in advance if checking
-	// for error first. However, C89/C99 (at variance with IEEE
-	// 1003.1, f.i.) do not mandate that fclose/fflush must set
-	// errno upon error.
-	int __err;
-	errno = 0;
+	int __err = 0;
 	if (_M_cfile_created)
-	  do
-	    __err = fclose(_M_cfile);
-	  while (__err && errno == EINTR);
-	else
-	  do
-	    __err = this->sync();
-	  while (__err && errno == EINTR);
+	  {
+	    // In general, no need to zero errno in advance if checking
+	    // for error first. However, C89/C99 (at variance with IEEE
+	    // 1003.1, f.i.) do not mandate that fclose must set errno
+	    // upon error.
+	    errno = 0;
+	    do
+	      __err = fclose(_M_cfile);
+	    while (__err && errno == EINTR);
+	  }
+	_M_cfile = 0;
 	if (!__err)
 	  __ret = this;
-	_M_cfile = 0;
       }
     return __ret;
   }
diff --git a/libstdc++-v3/include/bits/fstream.tcc b/libstdc++-v3/include/bits/fstream.tcc
index c24d4cac49fc3b17e1237835a434214d12f4bb37..d3ea37ffab11e79b8e93922ad0e467c87692fe8d 100644
--- a/libstdc++-v3/include/bits/fstream.tcc
+++ b/libstdc++-v3/include/bits/fstream.tcc
@@ -396,8 +396,7 @@ namespace std
 	      // Convert pending sequence to external representation,
 	      // and output.
 	      if (_M_convert_to_external(this->pbase(),
-					 this->pptr() - this->pbase())
-		  && (!__testeof || !_M_file.sync()))
+					 this->pptr() - this->pbase()))
 		{
 		  _M_set_buffer(0);
 		  __ret = traits_type::not_eof(__c);
@@ -792,7 +791,6 @@ namespace std
     {
       // Make sure that the internal buffer resyncs its idea of
       // the file position with the external file.
-      // NB: _M_file.sync() will be called within.
       int __ret = 0;
       if (this->pbase() < this->pptr())
 	{