X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fmain.c;h=15f84b183069a0bdca7903c6ce78fedc80d5374e;hb=efe18167d6ce59b263c179a6e2d01aa875c05cf8;hp=e9cddcb51a572ae2f1d127a9a6f0df477e208e79;hpb=80437693983321d32f20b6324128d441c5fccc49;p=src%2Fapp-framework-binder.git diff --git a/src/main.c b/src/main.c index e9cddcb5..15f84b18 100644 --- a/src/main.c +++ b/src/main.c @@ -16,15 +16,24 @@ * limitations under the License. */ -#include +#define _GNU_SOURCE +#include +#include +#include #include #include -#include -#include +#include +#include #include #include +#include + +#include "afb-plugin.h" #include "local-def.h" +#include "afb-apis.h" +#include "session.h" +#include "verbose.h" #if !defined(PLUGIN_INSTALL_DIR) #error "you should define PLUGIN_INSTALL_DIR" @@ -248,7 +257,7 @@ static void parse_arguments(int argc, char *argv[], AFB_session *session) switch (optc) { case SET_VERBOSE: - verbose = 1; + verbosity++; break; case SET_TCP_PORT: @@ -269,19 +278,19 @@ static void parse_arguments(int argc, char *argv[], AFB_session *session) case SET_ROOT_DIR: if (optarg == 0) goto needValueForOption; session->config->rootdir = optarg; - if (verbose) fprintf(stderr, "Forcing Rootdir=%s\n",session->config->rootdir); + if (verbosity) fprintf(stderr, "Forcing Rootdir=%s\n",session->config->rootdir); break; case SET_ROOT_BASE: if (optarg == 0) goto needValueForOption; session->config->rootbase = optarg; - if (verbose) fprintf(stderr, "Forcing Rootbase=%s\n",session->config->rootbase); + if (verbosity) fprintf(stderr, "Forcing Rootbase=%s\n",session->config->rootbase); break; case SET_ROOT_API: if (optarg == 0) goto needValueForOption; session->config->rootapi = optarg; - if (verbose) fprintf(stderr, "Forcing Rootapi=%s\n",session->config->rootapi); + if (verbosity) fprintf(stderr, "Forcing Rootapi=%s\n",session->config->rootapi); break; case SET_ALIAS: @@ -293,7 +302,7 @@ static void parse_arguments(int argc, char *argv[], AFB_session *session) } else { aliasdir[aliascount].path = optarg; aliasdir[aliascount].len = strlen(aliasdir[aliascount].url); - if (verbose) fprintf(stderr, "Alias url=%s path=%s\n", aliasdir[aliascount].url, aliasdir[aliascount].path); + if (verbosity) fprintf(stderr, "Alias url=%s path=%s\n", aliasdir[aliascount].url, aliasdir[aliascount].path); aliascount++; } } else { @@ -414,6 +423,36 @@ void signalQuit (int signum) { } +/*---------------------------------------------------------- + | Error signals + | + +--------------------------------------------------------- */ +__thread sigjmp_buf *error_handler; +static void signalError(int signum) +{ + sigset_t sigset; + + // unlock signal to allow a new signal to come + if (error_handler != NULL) { + sigemptyset(&sigset); + sigaddset(&sigset, signum); + sigprocmask(SIG_UNBLOCK, &sigset, 0); + longjmp(*error_handler, signum); + } +} + +static void install_error_handlers() +{ + int i, signals[] = { SIGALRM, SIGSEGV, SIGFPE, 0 }; + + for (i = 0; signals[i] != 0; i++) { + if (signal(signals[i], signalError) == SIG_ERR) { + fprintf(stderr, "Signal handler error\n"); + exit(1); + } + } +} + /*---------------------------------------------------------- | listenLoop | Main listening HTTP loop @@ -513,8 +552,12 @@ int main(int argc, char *argv[]) { exit (1); } - initPlugins(session); - ctxStoreInit(CTX_NBCLIENTS); + if (session->config->ldpaths) + afb_apis_add_pathset(session->config->ldpaths); + + ctxStoreInit(CTX_NBCLIENTS, session->config->cntxTimeout, afb_apis_count(), session->config->token); + + install_error_handlers(); // ------------------ Some useful default values ------------------------- if ((session->background == 0) && (session->foreground == 0)) session->foreground=1; @@ -540,19 +583,19 @@ int main(int argc, char *argv[]) { exit (1); } #endif - if (verbose) fprintf (stderr, "AFB: notice Init config done\n"); + if (verbosity) fprintf (stderr, "AFB: notice Init config done\n"); // ---- run in foreground mode -------------------- if (session->foreground) { - if (verbose) fprintf (stderr,"AFB: notice Foreground mode\n"); + if (verbosity) fprintf (stderr,"AFB: notice Foreground mode\n"); } // end foreground // --------- run in background mode ----------- if (session->background) { - if (verbose) printf ("AFB: Entering background mode\n"); + if (verbosity) printf ("AFB: Entering background mode\n"); daemonize(session); @@ -564,7 +607,7 @@ int main(int argc, char *argv[]) { listenLoop(session); - if (verbose) printf ("\n---- Application Framework Binder Normal End ------\n"); + if (verbosity) printf ("\n---- Application Framework Binder Normal End ------\n"); exit(0); }