mirror of
https://github.com/servalproject/serval-dna.git
synced 2024-12-18 20:57:56 +00:00
Initialise client API sockets before PID file
This commit is contained in:
parent
dfda3f7a74
commit
ae67dd9c56
@ -828,42 +828,6 @@ int app_server_start(const struct cli_parsed *parsed, struct cli_context *contex
|
||||
/* Process optional arguments */
|
||||
int pid=-1;
|
||||
int cpid=-1;
|
||||
#if 0
|
||||
// It would have been nice if whoever disabled this code had left a comment as to why they didn't
|
||||
// simply delete it altogether. In any event, this logic is largely redundant because the Android
|
||||
// Batphone app automatically calls "servald stop" then "servald start" (via JNI) whenever its
|
||||
// monitor interface socket is broken.
|
||||
// -- Andrew Bettison <andrew@servalproject.com>
|
||||
int status=server_probe(&pid);
|
||||
switch(status) {
|
||||
case SERVER_NOTRESPONDING:
|
||||
/* server is not responding, and we have been asked to start,
|
||||
so try to kill it?
|
||||
*/
|
||||
WHYF("Serval process already running (pid=%d), but no responding.", pid);
|
||||
if (pid>-1) {
|
||||
kill(pid,SIGHUP);
|
||||
sleep_ms(1000);
|
||||
status=server_probe(&pid);
|
||||
if (status!=SERVER_NOTRUNNING) {
|
||||
WHY("Tried to stop stuck servald process, but attempt failed.");
|
||||
RETURN(-1);
|
||||
}
|
||||
WHY("Killed stuck servald process, so will try to start");
|
||||
pid=-1;
|
||||
}
|
||||
break;
|
||||
case SERVER_NOTRUNNING:
|
||||
/* all is well */
|
||||
break;
|
||||
case SERVER_RUNNING:
|
||||
/* instance running */
|
||||
break;
|
||||
default:
|
||||
/* no idea what is going on, so try to start anyway */
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
const char *execpath;
|
||||
if (cli_arg(parsed, "exec", &execpath, cli_absolute_path, NULL) == -1)
|
||||
RETURN(-1);
|
||||
|
28
overlay.c
28
overlay.c
@ -84,10 +84,21 @@ int overlayServerMode(const struct cli_parsed *parsed)
|
||||
{
|
||||
IN();
|
||||
|
||||
/* In overlay mode we need to listen to all of our sockets, and also to
|
||||
send periodic traffic. This means we need to */
|
||||
INFO("Running in overlay mode.");
|
||||
|
||||
/* Setup up client API sockets before writing our PID file
|
||||
We want clients to be able to connect to our sockets as soon
|
||||
as servald start has returned. But we don't want servald start
|
||||
to take very long.
|
||||
Try to perform only minimal CPU or IO processing here.
|
||||
*/
|
||||
overlay_mdp_setup_sockets();
|
||||
monitor_setup_sockets();
|
||||
// start the HTTP server if enabled
|
||||
httpd_server_start(HTTPD_PORT, HTTPD_PORT_MAX);
|
||||
|
||||
/* record PID file so that servald start can return */
|
||||
if (server_write_pid())
|
||||
RETURN(-1);
|
||||
|
||||
/* Get keyring available for use.
|
||||
Required for MDP, and very soon as a complete replacement for the
|
||||
HLR for DNA lookups, even in non-overlay mode. */
|
||||
@ -122,10 +133,6 @@ schedule(&_sched_##X); }
|
||||
/* Periodically reload configuration */
|
||||
SCHEDULE(server_config_reload, SERVER_CONFIG_RELOAD_INTERVAL_MS, SERVER_CONFIG_RELOAD_INTERVAL_MS + 100);
|
||||
|
||||
/* Setup up MDP & monitor interface unix domain sockets */
|
||||
overlay_mdp_setup_sockets();
|
||||
monitor_setup_sockets();
|
||||
|
||||
overlay_mdp_bind_internal_services();
|
||||
|
||||
olsr_init_socket();
|
||||
@ -138,9 +145,6 @@ schedule(&_sched_##X); }
|
||||
rhizome_cleanup(NULL);
|
||||
}
|
||||
|
||||
// start the HTTP server if enabled
|
||||
httpd_server_start(HTTPD_PORT, HTTPD_PORT_MAX);
|
||||
|
||||
// start the dna helper if configured
|
||||
dna_helper_start();
|
||||
|
||||
@ -159,7 +163,7 @@ schedule(&_sched_##X); }
|
||||
#undef SCHEDULE
|
||||
|
||||
// log message used by tests to wait for the server to start
|
||||
INFO("Server started, entering main loop");
|
||||
INFO("Server initialised, entering main loop");
|
||||
/* Check for activitiy and respond to it */
|
||||
while(fd_poll());
|
||||
|
||||
|
1
serval.h
1
serval.h
@ -305,6 +305,7 @@ struct slip_decode_state{
|
||||
int server_pid();
|
||||
void server_save_argv(int argc, const char *const *argv);
|
||||
int server(const struct cli_parsed *parsed);
|
||||
int server_write_pid();
|
||||
int server_create_stopfile();
|
||||
int server_remove_stopfile();
|
||||
int server_check_stopfile();
|
||||
|
30
server.c
30
server.c
@ -112,25 +112,29 @@ int server(const struct cli_parsed *parsed)
|
||||
sigaction(SIGHUP, &sig, NULL);
|
||||
sigaction(SIGINT, &sig, NULL);
|
||||
|
||||
/* Record PID to advertise that the server is now running */
|
||||
char filename[1024];
|
||||
if (!FORM_SERVAL_INSTANCE_PATH(filename, PIDFILE_NAME))
|
||||
RETURN(-1);
|
||||
FILE *f=fopen(filename,"w");
|
||||
if (!f) {
|
||||
WHY_perror("fopen");
|
||||
RETURN(WHYF("Could not write to PID file %s", filename));
|
||||
}
|
||||
server_getpid = getpid();
|
||||
fprintf(f,"%d\n", server_getpid);
|
||||
fclose(f);
|
||||
|
||||
overlayServerMode(parsed);
|
||||
|
||||
RETURN(0);
|
||||
OUT();
|
||||
}
|
||||
|
||||
int server_write_pid()
|
||||
{
|
||||
/* Record PID to advertise that the server is now running */
|
||||
char filename[1024];
|
||||
if (!FORM_SERVAL_INSTANCE_PATH(filename, PIDFILE_NAME))
|
||||
return -1;
|
||||
FILE *f=fopen(filename,"w");
|
||||
if (!f) {
|
||||
WHY_perror("fopen");
|
||||
return WHYF("Could not write to PID file %s", filename);
|
||||
}
|
||||
server_getpid = getpid();
|
||||
fprintf(f,"%d\n", server_getpid);
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Called periodically by the server process in its main loop.
|
||||
*/
|
||||
void server_config_reload(struct sched_ent *alarm)
|
||||
|
@ -352,7 +352,6 @@ start_servald_server() {
|
||||
assert --message="a new servald process is running" --dump-on-fail="$instance_servald_log" [ -n "$new_pids" ]
|
||||
assert --message="servald pidfile process is running" --dump-on-fail="$instance_servald_log" $pidfile_running
|
||||
assert --message="servald log file $instance_servald_log is present" [ -r "$instance_servald_log" ]
|
||||
wait_until grep -q "Server started" "$instance_servald_log"
|
||||
tfw_log "# Started servald server process $instance_name, pid=$servald_pid"
|
||||
pop_instance
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user