Procházet zdrojové kódy

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 před 4 roky
rodič
revize
73cb566041
1 změnil soubory, kde provedl 5 přidání a 1 odebrání
  1. 5 1
      AK/Format.cpp

+ 5 - 1
AK/Format.cpp

@@ -20,6 +20,7 @@
 #    include <Kernel/Thread.h>
 #else
 #    include <stdio.h>
+#    include <string.h>
 #endif
 
 namespace AK {
@@ -608,7 +609,10 @@ void vout(FILE* file, StringView fmtstr, TypeErasedFormatParams params, bool new
 
     const auto string = builder.string_view();
     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