diff --git a/rtl/inc/system.inc b/rtl/inc/system.inc index 3d6a64809a..84cc74a377 100644 --- a/rtl/inc/system.inc +++ b/rtl/inc/system.inc @@ -847,31 +847,11 @@ Procedure FinalizeHeap;forward; {$endif HAS_MEMORYMANAGER} {$endif FPC_HAS_FEATURE_HEAP} - -Procedure InternalExit; +{$ifdef FPC_HAS_FEATURE_CONSOLEIO} +procedure SysFlushStdIO; var - current_exit : Procedure; -{$ifdef FPC_HAS_FEATURE_CONSOLEIO} pstdout : ^Text; -{$endif} -{$if defined(MSWINDOWS) or defined(OS2)} - i : longint; -{$endif} -Begin -{$ifdef SYSTEMDEBUG} - writeln('InternalExit'); -{$endif SYSTEMDEBUG} - while exitProc<>nil Do - Begin - InOutRes:=0; - current_exit:=tProcedure(exitProc); - exitProc:=nil; - current_exit(); - End; - { Finalize units } - FinalizeUnits; - -{$ifdef FPC_HAS_FEATURE_CONSOLEIO} +begin { Show runtime error and exit } pstdout:=@stdout; If erroraddr<>nil Then @@ -892,6 +872,32 @@ Begin Flush(pstdout^); if Textrec(StdErr).Mode=fmOutput then Flush(StdErr); +end; +{$endif FPC_HAS_FEATURE_CONSOLEIO} + + +Procedure InternalExit; +var + current_exit : Procedure; +{$if defined(MSWINDOWS) or defined(OS2)} + i : longint; +{$endif} +Begin +{$ifdef SYSTEMDEBUG} + writeln('InternalExit'); +{$endif SYSTEMDEBUG} + while exitProc<>nil Do + Begin + InOutRes:=0; + current_exit:=tProcedure(exitProc); + exitProc:=nil; + current_exit(); + End; + { Finalize units } + FinalizeUnits; + +{$ifdef FPC_HAS_FEATURE_CONSOLEIO} + SysFlushStdIO; {$endif FPC_HAS_FEATURE_CONSOLEIO} {$if defined(MSWINDOWS) or defined(OS2)} diff --git a/rtl/inc/systemh.inc b/rtl/inc/systemh.inc index 37757fc12e..e25781ed53 100644 --- a/rtl/inc/systemh.inc +++ b/rtl/inc/systemh.inc @@ -1093,6 +1093,7 @@ Procedure SysInitExceptions; {$endif FPC_HAS_FEATURE_EXCEPTIONS} {$ifdef FPC_HAS_FEATURE_CONSOLEIO} procedure SysInitStdIO; +procedure SysFlushStdIO; {$endif FPC_HAS_FEATURE_CONSOLEIO} {$ifndef FPUNONE} Procedure SysResetFPU; diff --git a/rtl/inc/thread.inc b/rtl/inc/thread.inc index c06a2ab86e..fda06c3790 100644 --- a/rtl/inc/thread.inc +++ b/rtl/inc/thread.inc @@ -67,6 +67,10 @@ Var {$endif HAS_MEMORYMANAGER} if MemoryManager.DoneThread <> nil then MemoryManager.DoneThread(); +{$ifdef FPC_HAS_FEATURE_CONSOLEIO} + { Open all stdio fds again } + SysFlushStdio; +{$endif FPC_HAS_FEATURE_CONSOLEIO} CurrentTM.ReleaseThreadVars; end;