Going on
This commit is contained in:
parent
1b47027612
commit
c364cff1e5
50
src/init.c
50
src/init.c
|
@ -3,27 +3,73 @@
|
||||||
|
|
||||||
|
|
||||||
#include <System.h>
|
#include <System.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <signal.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
/* Init */
|
/* Init */
|
||||||
|
static int _init_error(char * message, int ret);
|
||||||
|
static int _init_init(void);
|
||||||
static int _init(void)
|
static int _init(void)
|
||||||
{
|
{
|
||||||
Event * event;
|
Event * event;
|
||||||
AppServer * appserver;
|
AppServer * appserver;
|
||||||
|
|
||||||
if((event = event_new()) == NULL)
|
if(_init_init() != 0)
|
||||||
return 1;
|
return 1;
|
||||||
if((appserver = appserver_new_event("Init", event)) == NULL)
|
if((event = event_new()) == NULL)
|
||||||
|
return _init_error("Event", 1);
|
||||||
|
if((appserver = appserver_new_event("Session", ASO_LOCAL, event))
|
||||||
|
== NULL)
|
||||||
{
|
{
|
||||||
|
_init_error("AppServer", 1);
|
||||||
event_delete(event);
|
event_delete(event);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
for(;;)
|
for(;;)
|
||||||
event_loop(event);
|
event_loop(event);
|
||||||
|
appserver_delete(appserver);
|
||||||
|
event_delete(event);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _init_error(char * message, int ret)
|
||||||
|
/* FIXME should use other means to report errors */
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s", "Init: ");
|
||||||
|
perror(message);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _init_sighandler(int signum);
|
||||||
|
static int _init_init(void)
|
||||||
|
{
|
||||||
|
struct sigaction sa;
|
||||||
|
|
||||||
|
sa.sa_handler = _init_sighandler;
|
||||||
|
sigfillset(&sa.sa_mask);
|
||||||
|
if(sigaction(SIGCHLD, &sa, NULL) == -1
|
||||||
|
|| sigaction(SIGHUP, &sa, NULL) == -1)
|
||||||
|
return _init_error("sigaction", 1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _init_sighandler(int signum)
|
||||||
|
{
|
||||||
|
switch(signum)
|
||||||
|
{
|
||||||
|
case SIGCHLD:
|
||||||
|
if(waitpid(-1, NULL, WNOHANG) == -1)
|
||||||
|
_init_error("waitpid", 0);
|
||||||
|
break;
|
||||||
|
case SIGHUP:
|
||||||
|
/* FIXME reload configuration? */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* usage */
|
/* usage */
|
||||||
static int _init_usage(void)
|
static int _init_usage(void)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user