瀏覽代碼

AK: Make vout() log to debug instead of VERIFY()'ing

In case the write was to stderr/stdout, and it just so happened to fail
because of an issue like "the pty is gone", VERIFY() would end up
calling vout() back to write to stderr, which would then fail forever
until the stack is exhausted.
"Fixes" the issue where the Shell would crash in horrible ways when the
terminal is closed.
Ali Mohammad Pur 4 年之前
父節點
當前提交
73cb566041
共有 1 個文件被更改,包括 5 次插入1 次删除
  1. 5 1
      AK/Format.cpp

+ 5 - 1
AK/Format.cpp

@@ -20,6 +20,7 @@
 #    include <Kernel/Thread.h>
 #    include <Kernel/Thread.h>
 #else
 #else
 #    include <stdio.h>
 #    include <stdio.h>
+#    include <string.h>
 #endif
 #endif
 
 
 namespace AK {
 namespace AK {
@@ -608,7 +609,10 @@ void vout(FILE* file, StringView fmtstr, TypeErasedFormatParams params, bool new
 
 
     const auto string = builder.string_view();
     const auto string = builder.string_view();
     const auto retval = ::fwrite(string.characters_without_null_termination(), 1, string.length(), file);
     const auto retval = ::fwrite(string.characters_without_null_termination(), 1, string.length(), file);
-    VERIFY(static_cast<size_t>(retval) == string.length());
+    if (static_cast<size_t>(retval) != string.length()) {
+        auto error = ferror(file);
+        dbgln("vout() failed ({} written out of {}), error was {} ({})", retval, string.length(), error, strerror(error));
+    }
 }
 }
 #endif
 #endif