/*
- * Copyright (c) 1995-2002, Index Data
+ * Copyright (c) 1995-2003, Index Data
* See the file LICENSE for details.
* Sebastian Hammer, Adam Dickmeiss
*
* NT threaded server code by
* Chas Woodfield, Fretwell Downing Informatics.
*
- * $Id: statserv.c,v 1.83 2002-08-17 07:56:59 adam Exp $
+ * $Id: statserv.c,v 1.89 2003-01-13 14:32:06 adam Exp $
*/
#include <stdio.h>
}
}
+int statserv_must_terminate(void)
+{
+ return 0;
+}
+
#else /* ! WIN32 */
-/* To save having an #ifdef in event_loop we need to define this empty function */
+static int term_flag = 0;
+/* To save having an #ifdef in event_loop we need to
+ define this empty function
+*/
+int statserv_must_terminate(void)
+{
+ return term_flag;
+}
+
void statserv_remove(IOCHAN pIOChannel)
{
}
if (control_block.bend_stop)
(*control_block.bend_stop)(&control_block);
-
for (p = pListener; p; p = p->next)
+ {
iochan_destroy(p);
+ }
}
void sigterm(int sig)
{
- statserv_closedown();
- exit (0);
+ term_flag = 1;
}
static void *new_session (void *vp);
}
sprintf(nbuf, "%s(%d)", me, getpid());
yaz_log_init(control_block.loglevel, nbuf, 0);
+ /* ensure that bend_stop is not called when each child exits -
+ only for the main process ..
+ */
+ control_block.bend_stop = 0;
}
else /* parent */
{
char dummy[1];
int res;
- if ((res = read(hand[0], dummy, 1)) < 0 && errno != EINTR)
+ if ((res = read(hand[0], dummy, 1)) < 0 &&
+ yaz_errno() != EINTR)
{
yaz_log(LOG_FATAL|LOG_ERRNO, "handshake read");
return;
new_session(new_line);
#endif
}
+ else if (event == EVENT_TIMEOUT)
+ {
+ yaz_log(LOG_LOG, "Shutting down listener.");
+ iochan_destroy(h);
+ }
else
{
yaz_log(LOG_FATAL, "Bad event on listener.");
iochan_destroy(h);
- return;
}
}
return 0;
}
-#endif /* WIN32 */
+/* UNIX */
+#endif
static void inetd_connection(int what)
{
}
#ifndef WIN32
-/* For windows we don't need to catch the signals */
+/* UNIX only (for windows we don't need to catch the signals) */
static void catchchld(int num)
{
while (waitpid(-1, 0, WNOHANG) > 0)
;
signal(SIGCHLD, catchchld);
}
-#endif /* WIN32 */
+#endif
statserv_options_block *statserv_getcontrol(void)
{
#ifdef WIN32
/* We need to initialize the thread list */
ThreadList_Initialize();
-#endif /* WIN32 */
+/* WIN32 */
+#endif
#ifdef WIN32
if ((me = strrchr (argv[0], '\\')))
#ifdef WIN32
logf (LOG_LOG, "Starting server %s", me);
#else
+/* UNIX */
if (control_block.inetd)
inetd_connection(control_block.default_proto);
else
{
- logf (LOG_LOG, "Starting server %s pid=%d", me, getpid());
+ yaz_log (LOG_LOG, "Starting server %s pid=%d", me, getpid());
#if 0
sigset_t sigs_to_block;
exit(1);
}
}
-#endif /* WIN32 */
-
+/* UNIX */
+#endif
+
+
if ((pListener == NULL) && *control_block.default_listen)
add_listener(control_block.default_listen,
control_block.default_proto);
/* Now setup the service with the service controller */
SetupService(argc, argv, &ArgDetails, SZAPPNAME,
cb->service_name, /* internal service name */
- cb->service_name, /* displayed name of the service */
+ cb->service_display_name, /* displayed name */
SZDEPENDENCIES);
return 0;
}
/* Stops the app */
statserv_closedown();
}
+/* WIN32 */
#else
+/* UNIX */
int statserv_main(int argc, char **argv,
bend_initresult *(*bend_init)(bend_initrequest *r),
void (*bend_close)(void *handle))