diff mbox

PR65411 don't retry fclose on EINTR

Message ID 20170113175230.GA13479@redhat.com
State New
Headers show

Commit Message

Jonathan Wakely Jan. 13, 2017, 5:52 p.m. UTC
After an interrupted fclose() we can't know if it's safe (or undefined
behaviour) to re-use the FILE*, so we shouldn't try calling fclose
again.

	PR libstdc++/65411
	* config/io/basic_file_stdio.cc (__basic_file<char>::close()): Don't
	retry fclose on EINTR.

Tested x86_64-linux, committed to trunk.
commit 852ab4a7f7619036ddf2d7263a40368c351ff19c
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Fri Jan 13 17:25:06 2017 +0000

    PR65411 don't retry fclose on EINTR
    
    	PR libstdc++/65411
    	* config/io/basic_file_stdio.cc (__basic_file<char>::close()): Don't
    	retry fclose on EINTR.
diff mbox

Patch

diff --git a/libstdc++-v3/config/io/basic_file_stdio.cc b/libstdc++-v3/config/io/basic_file_stdio.cc
index a0ad82c..e736701 100644
--- a/libstdc++-v3/config/io/basic_file_stdio.cc
+++ b/libstdc++-v3/config/io/basic_file_stdio.cc
@@ -267,16 +267,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
       {
 	int __err = 0;
 	if (_M_cfile_created)
-	  {
-	    // 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);
-	  }
+	  __err = fclose(_M_cfile);
 	_M_cfile = 0;
 	if (!__err)
 	  __ret = this;