浏览代码

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;