Add "exit-when-halted" halted option for arlua

This is useful when when the ardour-lua is started by a
command based wrapper that cannot poll the engine state.
This commit is contained in:
Robin Gareus 2020-04-29 20:15:22 +02:00
parent 551be058f2
commit b42c72e49f
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
1 changed files with 27 additions and 10 deletions

View File

@ -50,7 +50,9 @@ static PBD::ScopedConnectionList engine_connections;
static PBD::ScopedConnectionList session_connections;
static Session* session = NULL;
static LuaState* lua;
static bool keep_running = true;
static bool keep_running = true;
static bool terminate_when_halted = false;
/* extern VST functions */
int vstfx_init (void*) { return 0; }
@ -83,9 +85,7 @@ protected:
}
/* note: iostreams are already thread-safe: no external
lock required.
*/
* lock required. */
std::cout << prefix << str << std::endl;
if (chn == Transmitter::Fatal) {
@ -139,8 +139,7 @@ static void
init ()
{
if (!ARDOUR::init (false, true, localedir)) {
cerr << "Ardour failed to initialize\n"
<< endl;
cerr << "Ardour failed to initialize\n" << endl;
::exit (EXIT_FAILURE);
}
@ -380,6 +379,15 @@ do_quit (lua_State* L)
return 0;
}
static void
engine_halted (const char* err)
{
if (terminate_when_halted) {
cerr << "Engine halted: " << err << "\n";
::exit (EXIT_FAILURE);
}
}
/* ****************************************************************************/
static void
@ -425,6 +433,8 @@ setup_lua ()
lua_setglobal (L, "AudioEngine");
AudioEngine::instance ()->stop ();
AudioEngine::instance()->Halted.connect_same_thread (engine_connections, boost::bind (&engine_halted, _1));
}
static int
@ -523,6 +533,8 @@ usage ()
-h, --help display this help and exit\n\
-i, --interactive enter interactive mode after executing 'script',\n\
force the interpreter to run interactively\n\
-X, --exit-when-halted terminate when the audio-engine halts\n\
unexpectedly.\n\
-V, --version print version information and exit\n\
\n");
printf ("\n\
@ -536,12 +548,13 @@ Ardour at your finger tips...\n\
int
main (int argc, char** argv)
{
const char* optstring = "hiV";
const char* optstring = "hiVX";
const struct option longopts[] = {
{ "help", 0, 0, 'h' },
{ "interactive", 0, 0, 'i' },
{ "version", 0, 0, 'V' },
{ "help", 0, 0, 'h' },
{ "interactive", 0, 0, 'i' },
{ "version", 0, 0, 'V' },
{ "exit-when-halted", 0, 0, 'X' },
};
bool interactive = false;
@ -564,6 +577,10 @@ main (int argc, char** argv)
exit (EXIT_SUCCESS);
break;
case 'X':
terminate_when_halted = true;
break;
default:
cerr << "Error: unrecognized option. See --help for usage information.\n";
::exit (EXIT_FAILURE);