diff --git a/src/engine/compile.cpp b/src/engine/compile.cpp index b16826905..3a85a03f2 100644 --- a/src/engine/compile.cpp +++ b/src/engine/compile.cpp @@ -37,6 +37,7 @@ #include "jam_strings.h" #include "variable.h" #include "output.h" +#include "startup.h" #include #include @@ -146,7 +147,15 @@ LIST * evaluate_rule( RULE * rule, OBJECT * rulename, FRAME * frame ) if ( rule->procedure ) { auto function = b2::jam::make_unique_bare_jptr( rule->procedure, function_refer, function_free ); - result = function_run( function.get(), frame ); + try + { + result = function_run( function.get(), frame ); + } + catch( b2::exit_result r ) + { + lol_free( frame->args ); + b2::clean_exit( r ); + } } if ( DEBUG_PROFILE && rule->procedure ) diff --git a/src/engine/jam.cpp b/src/engine/jam.cpp index 5c3baff7c..42a69cd1e 100644 --- a/src/engine/jam.cpp +++ b/src/engine/jam.cpp @@ -681,6 +681,8 @@ int main( int argc, char * * argv ) catch ( b2::exit_result exit_code ) { result = (int)exit_code; + out_flush(); + err_flush(); } if ( DEBUG_PROFILE )