X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fstatserv.c;h=c58646fe708cb8ef1216925434a9f36e1ebdb86c;hb=3d4e0c75cee82cc17fa5da38051b072d9bed61a7;hp=fafff6bf770d0ef3bf4672c741e33e5bba4e2d96;hpb=540056f9cf1a3304b253db09eba899cc6763466d;p=yaz-moved-to-github.git diff --git a/src/statserv.c b/src/statserv.c index fafff6b..c58646f 100644 --- a/src/statserv.c +++ b/src/statserv.c @@ -697,7 +697,7 @@ void statserv_remove(IOCHAN pIOChannel) } /* WIN32 statserv_closedown */ -void statserv_closedown() +static void statserv_closedown() { /* Shouldn't do anything if we are not initialized */ if (bInitialized) @@ -767,9 +767,9 @@ void statserv_closedown() xml_config_close(); } -void __cdecl event_loop_thread (IOCHAN iochan) +void __cdecl event_loop_thread(IOCHAN iochan) { - iochan_event_loop (&iochan); + iochan_event_loop(&iochan); } /* WIN32 listener */ @@ -870,7 +870,7 @@ void statserv_remove(IOCHAN pIOChannel) { } -void statserv_closedown() +static void statserv_closedown(void) { IOCHAN p; @@ -887,7 +887,7 @@ void sigterm(int sig) term_flag = 1; } -static void *new_session (void *vp); +static void *new_session(void *vp); static int no_sessions = 0; /* UNIX listener */ @@ -957,20 +957,20 @@ static void listener(IOCHAN h, int event) { #if YAZ_POSIX_THREADS pthread_t child_thread; - pthread_create (&child_thread, 0, new_session, new_line); - pthread_detach (child_thread); + pthread_create(&child_thread, 0, new_session, new_line); + pthread_detach(child_thread); #elif YAZ_GNU_THREADS pth_attr_t attr; pth_t child_thread; - attr = pth_attr_new (); - pth_attr_set (attr, PTH_ATTR_JOINABLE, FALSE); - pth_attr_set (attr, PTH_ATTR_STACK_SIZE, 32*1024); - pth_attr_set (attr, PTH_ATTR_NAME, "session"); - yaz_log (YLOG_DEBUG, "pth_spawn begin"); - child_thread = pth_spawn (attr, new_session, new_line); - yaz_log (YLOG_DEBUG, "pth_spawn finish"); - pth_attr_destroy (attr); + attr = pth_attr_new(); + pth_attr_set(attr, PTH_ATTR_JOINABLE, FALSE); + pth_attr_set(attr, PTH_ATTR_STACK_SIZE, 32*1024); + pth_attr_set(attr, PTH_ATTR_NAME, "session"); + yaz_log(YLOG_DEBUG, "pth_spawn begin"); + child_thread = pth_spawn(attr, new_session, new_line); + yaz_log(YLOG_DEBUG, "pth_spawn finish"); + pth_attr_destroy(attr); #else new_session(new_line); #endif @@ -990,7 +990,7 @@ static void listener(IOCHAN h, int event) } } -static void *new_session (void *vp) +static void *new_session(void *vp) { char *a; association *newas; @@ -1035,6 +1035,7 @@ static void *new_session (void *vp) #else a = 0; #endif + yaz_log_xml_errors(0, YLOG_WARN); yaz_log(log_session, "Session - OK %d %s %ld", no_sessions, a ? a : "[Unknown]", (long) getpid()); if (max_sessions && no_sessions >= max_sessions) @@ -1130,14 +1131,14 @@ static int add_listener(char *where, int listen_id) else yaz_log(YLOG_FATAL, "Failed to bind to %s: %s", where, cs_strerror(l)); - cs_close (l); + cs_close(l); return -1; } if (!(lst = iochan_create(cs_fileno(l), listener, EVENT_INPUT | EVENT_EXCEPT, listen_id))) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "Failed to create IOCHAN-type"); - cs_close (l); + cs_close(l); return -1; } iochan_setdata(lst, l); /* user-defined data for listener is COMSTACK */ @@ -1197,7 +1198,7 @@ static void statserv_reset(void) { } -int statserv_start(int argc, char **argv) +static int statserv_sc_main(yaz_sc_t s, int argc, char **argv) { char sep; #ifdef WIN32 @@ -1212,7 +1213,7 @@ int statserv_start(int argc, char **argv) #else sep = '/'; #endif - if ((me = strrchr (argv[0], sep))) + if ((me = strrchr(argv[0], sep))) me++; /* get the basename */ else me = argv[0]; @@ -1228,7 +1229,7 @@ int statserv_start(int argc, char **argv) #ifdef WIN32 xml_config_add_listeners(); - yaz_log (log_server, "Starting server %s", me); + yaz_log(log_server, "Starting server %s", me); if (!pListener && *control_block.default_listen) add_listener(control_block.default_listen, 0); #else @@ -1306,21 +1307,21 @@ int statserv_start(int argc, char **argv) close(hand[1]); - yaz_log (log_server, "Starting server %s pid=%ld", programname, - (long) getpid()); + yaz_log(log_server, "Starting server %s pid=%ld", programname, + (long) getpid()); #if 0 sigset_t sigs_to_block; sigemptyset(&sigs_to_block); - sigaddset (&sigs_to_block, SIGTERM); - pthread_sigmask (SIG_BLOCK, &sigs_to_block, 0); + sigaddset(&sigs_to_block, SIGTERM); + pthread_sigmask(SIG_BLOCK, &sigs_to_block, 0); /* missing... */ #endif if (control_block.dynamic) signal(SIGCHLD, catchchld); } - signal (SIGPIPE, SIG_IGN); - signal (SIGTERM, sigterm); + signal(SIGPIPE, SIG_IGN); + signal(SIGTERM, sigterm); if (*control_block.setuid) { struct passwd *pw; @@ -1340,6 +1341,8 @@ int statserv_start(int argc, char **argv) #endif if (pListener == NULL) return 1; + if (s) + yaz_sc_running(s); yaz_log(YLOG_DEBUG, "Entering event loop."); return iochan_event_loop(&pListener); } @@ -1357,7 +1360,6 @@ int check_options(int argc, char **argv) yaz_log_init_level(yaz_log_mask_str(STAT_DEFAULT_LOG_LEVEL)); - yaz_log_xml_errors(0, YLOG_WARN); get_logbits(1); while ((ret = options("1a:iszSTl:v:u:c:w:t:k:d:A:p:DC:f:m:r:", @@ -1377,8 +1379,8 @@ int check_options(int argc, char **argv) control_block.default_proto = PROTO_Z3950; break; case 's': - fprintf (stderr, "%s: SR protocol no longer supported\n", me); - exit (1); + fprintf(stderr, "%s: SR protocol no longer supported\n", me); + exit(1); break; case 'S': control_block.dynamic = 0; @@ -1493,12 +1495,6 @@ void statserv_sc_stop(yaz_sc_t s) statserv_reset(); } -int statserv_sc_main(yaz_sc_t s, int argc, char **argv) -{ - yaz_sc_running(s); - return statserv_start(argc, argv); -} - int statserv_main(int argc, char **argv, bend_initresult *(*bend_init)(bend_initrequest *r), void (*bend_close)(void *handle)) @@ -1506,8 +1502,14 @@ int statserv_main(int argc, char **argv, int ret; struct statserv_options_block *cb = &control_block; - yaz_sc_t s = yaz_sc_create(cb->service_name, - cb->service_display_name); + /* control block does not have service_name member on Unix */ + yaz_sc_t s = yaz_sc_create( +#ifdef WIN32 + cb->service_name, cb->service_display_name +#else + 0, 0 +#endif + ); cb->bend_init = bend_init; cb->bend_close = bend_close;