X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=main.c;h=6eb2b68afe796b1f75bbee1822fb2f09b91f5dd0;hp=c35be368bc650bf1b33bf358e79b047fd32e396a;hb=5df02da464adcac01848f5ab465d02a7574af663;hpb=a12d7eee22a72f4c999535892763dde15212e89e diff --git a/main.c b/main.c index c35be36..6eb2b68 100644 --- a/main.c +++ b/main.c @@ -10,6 +10,15 @@ \*****************************************************************************/ #include "main.h" +#ifdef PACKAGE_VERSION +#undef PACKAGE_VERSION +#endif +#include "config.h" +#ifdef WITH_GSM_MS +extern "C" { +#include +} +#endif //MESSAGES @@ -137,11 +146,23 @@ void _printerror(const char *function, int line, const char *fmt, ...) void sighandler(int sigset) { struct sched_param schedp; +#ifdef WITH_GSM_MS + int wait_ms = 0; +#endif if (sigset == SIGHUP) return; if (sigset == SIGPIPE) return; + fprintf(stderr, "LCR: Signal received: %d\n", sigset); + PDEBUG(DEBUG_LOG, "Signal received: %d\n", sigset); +#ifdef WITH_GSM_MS + if (!wait_ms) { + wait_ms = 1; + osmo_signal_dispatch(SS_GLOBAL, S_GLOBAL_SHUTDOWN, NULL); + return; + } +#endif if (!quit) { quit = sigset; /* set scheduler & priority */ @@ -150,8 +171,6 @@ void sighandler(int sigset) schedp.sched_priority = 0; sched_setscheduler(0, SCHED_OTHER, &schedp); } - fprintf(stderr, "LCR: Signal received: %d\n", sigset); - PDEBUG(DEBUG_LOG, "Signal received: %d\n", sigset); } } @@ -363,7 +382,7 @@ int main(int argc, char *argv[]) } #if defined WITH_GSM_BS || defined WITH_GSM_MS - /* handle gsm */ + /* init gsm */ if (options.gsm && gsm_init()) { fprintf(stderr, "GSM initialization failed.\n"); goto free; @@ -468,12 +487,8 @@ int main(int argc, char *argv[]) if (options.gsm) { if (handle_gsm()) all_idle = 0; -#ifdef WITH_GSM_BS - if (handle_gsm_bs()) - all_idle = 0; -#endif #ifdef WITH_GSM_MS - if (handle_gsm_ms()) + if (handle_gsm_ms(&quit)) all_idle = 0; #endif } @@ -601,6 +616,10 @@ free: #endif } + /* close loopback, if used by GSM or remote */ + if (mISDNloop.sock > -1) + mISDNloop_close(); + /* display memory leak */ #define MEMCHECK(a, b) \ if (b) { \