server: Register signal handler to reopen logfiles on SIGHUP

This commit is contained in:
Daniel Willmann 2011-07-17 17:48:18 +02:00 committed by Holger Hans Peter Freyther
parent de77386d84
commit c7401c6c23
3 changed files with 26 additions and 0 deletions

View File

@ -63,6 +63,7 @@ struct osmo_pcap_conn {
/* read buffering */
int state;
int pend;
int reopen;
char buf[4096];
struct osmo_pcap_data *data;
};
@ -80,6 +81,7 @@ struct osmo_pcap_server {
extern struct osmo_pcap_server *pcap_server;
void osmo_pcap_server_reopen(struct osmo_pcap_server *server);
int osmo_pcap_server_listen(struct osmo_pcap_server *server);
struct osmo_pcap_conn *osmo_pcap_server_find(struct osmo_pcap_server *ser,
const char *name);

View File

@ -140,6 +140,9 @@ static void signal_handler(int signal)
talloc_report(tall_vty_ctx, stderr);
talloc_report_full(tall_bsc_ctx, stderr);
break;
case SIGHUP:
osmo_pcap_server_reopen(pcap_server);
break;
default:
break;
}
@ -175,6 +178,7 @@ int main(int argc, char **argv)
signal(SIGABRT, &signal_handler);
signal(SIGUSR1, &signal_handler);
osmo_init_ignore_signals();
signal(SIGHUP, &signal_handler);
telnet_init(tall_bsc_ctx, NULL, 4241);

View File

@ -253,6 +253,11 @@ static int read_cb(struct osmo_fd *fd, unsigned int what)
conn = fd->data;
if (conn->state == STATE_INITIAL) {
if (conn->reopen) {
LOGP(DSERVER, LOGL_INFO, "Reopening log for %s now.\n", conn->name);
restart_pcap(conn);
conn->reopen = 0;
}
return read_cb_initial(fd, conn);
} else if (conn->state == STATE_DATA) {
return read_cb_data(fd, conn);
@ -336,3 +341,18 @@ int osmo_pcap_server_listen(struct osmo_pcap_server *server)
return 0;
}
void osmo_pcap_server_reopen(struct osmo_pcap_server *server)
{
struct osmo_pcap_conn *conn;
LOGP(DSERVER, LOGL_INFO, "Reopening all logfiles.\n");
llist_for_each_entry(conn, &server->conn, entry) {
/* Write the complete packet out first */
if (conn->state == STATE_INITIAL) {
restart_pcap(conn);
} else {
LOGP(DSERVER, LOGL_INFO, "Delaying %s until current packet is complete.\n", conn->name);
conn->reopen = 1;
}
}
}