// u/* -*- Mode: C++ ; c-basic-offset: 4 -*- */ /* JACK control API implementation Copyright (C) 2008 Nedko Arnaudov Copyright (C) 2008 Grame Copyright (C) 2013 Samsung Electronics This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef WIN32 #include #include #include #endif #include "types.h" #include #include #include #include #include #include "JackControlAPIAndroid.h" #include "JackConstants.h" #include "JackServerGlobals.h" using namespace Jack; struct jackctl_sigmask { sigset_t signals; }; static jackctl_sigmask sigmask; SERVER_EXPORT int jackctl_wait_signals_and_return(jackctl_sigmask_t * sigmask) { int sig; bool waiting = true; while (waiting) { #if defined(sun) && !defined(__sun__) // SUN compiler only, to check sigwait(&sigmask->signals); #else sigwait(&sigmask->signals, &sig); #endif fprintf(stderr, "Jack main caught signal %d\n", sig); switch (sig) { case SIGUSR1: //jack_dump_configuration(engine, 1); break; case SIGUSR2: // driver exit waiting = false; break; case SIGTTOU: break; default: waiting = false; break; } } if (sig != SIGSEGV) { // unblock signals so we can see them during shutdown. // this will help prod developers not to lose sight of // bugs that cause segfaults etc. during shutdown. sigprocmask(SIG_UNBLOCK, &sigmask->signals, 0); } return sig; }