Explorar el Código

fix unsynchronized access to FILE structure in fflush(0)

commit c002668eb0352e619ea7064e4940b397b4a6e68d inadvertently moved
the check for unflushed write buffer outside of the scope of the
existing lock.
Rich Felker hace 7 años
padre
commit
670d6d01f5
Se han modificado 1 ficheros con 4 adiciones y 1 borrados
  1. 4 1
      src/stdio/fflush.c

+ 4 - 1
src/stdio/fflush.c

@@ -9,8 +9,11 @@ int fflush(FILE *f)
 	if (!f) {
 		int r = __stdout_used ? fflush(__stdout_used) : 0;
 
-		for (f=*__ofl_lock(); f; f=f->next)
+		for (f=*__ofl_lock(); f; f=f->next) {
+			FLOCK(f);
 			if (f->wpos > f->wbase) r |= fflush(f);
+			FUNLOCK(f);
+		}
 		__ofl_unlock();
 
 		return r;