Преглед на файлове

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 преди 7 години
родител
ревизия
670d6d01f5
променени са 1 файла, в които са добавени 4 реда и са изтрити 1 реда
  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;