ソースを参照

* Partially reverted rev.17798: printing the runtime error message must remain in InternalExit.
Moving it to SysFlushStdIo causes a multithreaded program to print several messages with meaningless stack traces.

git-svn-id: trunk@17944 -

sergei 14 年 前
コミット
d9c399f6a1
1 ファイル変更15 行追加16 行削除
  1. 15 16
      rtl/inc/system.inc

+ 15 - 16
rtl/inc/system.inc

@@ -849,36 +849,25 @@ Procedure FinalizeHeap;forward;
 
 {$ifdef FPC_HAS_FEATURE_CONSOLEIO}
 procedure SysFlushStdIO;
-var
-  pstdout : ^Text;
 begin
-  { Show runtime error and exit }
-  pstdout:=@stdout;
-  If erroraddr<>nil Then
-   Begin
-     Writeln(pstdout^,'Runtime error ',Errorcode,' at $',hexstr(erroraddr));
-     { to get a nice symify }
-     Writeln(pstdout^,BackTraceStrFunc(Erroraddr));
-     dump_stack(pstdout^,ErrorBase);
-     Writeln(pstdout^,'');
-   End;
-
   { Make sure that all output is written to the redirected file }
   if Textrec(Output).Mode=fmOutput then
     Flush(Output);
   if Textrec(ErrOutput).Mode=fmOutput then
     Flush(ErrOutput);
-  if Textrec(pstdout^).Mode=fmOutput then
-    Flush(pstdout^);
+  if Textrec(stdout).Mode=fmOutput then
+    Flush(stdout);
   if Textrec(StdErr).Mode=fmOutput then
     Flush(StdErr);
 end;
 {$endif FPC_HAS_FEATURE_CONSOLEIO}
 
-
 Procedure InternalExit;
 var
   current_exit : Procedure;
+{$ifdef FPC_HAS_FEATURE_CONSOLEIO}
+  pstdout : ^Text;
+{$endif}
 {$if defined(MSWINDOWS) or defined(OS2)}
   i : longint;
 {$endif}
@@ -897,6 +886,16 @@ Begin
   FinalizeUnits;
 
 {$ifdef FPC_HAS_FEATURE_CONSOLEIO}
+  { Show runtime error and exit }
+  pstdout:=@stdout;
+  If erroraddr<>nil Then
+   Begin
+     Writeln(pstdout^,'Runtime error ',Errorcode,' at $',hexstr(erroraddr));
+     { to get a nice symify }
+     Writeln(pstdout^,BackTraceStrFunc(Erroraddr));
+     dump_stack(pstdout^,ErrorBase);
+     Writeln(pstdout^,'');
+   End;
   SysFlushStdIO;
 {$endif FPC_HAS_FEATURE_CONSOLEIO}