jolly has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmo-netif/+/35925?usp=email )
Change subject: examples/stream-*: Prevent signals from interrupting main loop ......................................................................
examples/stream-*: Prevent signals from interrupting main loop
SIGHUP and SIGPIPE are signals that must not interrupt the main loop if a socket is closed or fails.
Change-Id: Ida3858600f5c87ff559e75ddf9ac031b3a8592a9 --- M examples/stream-client.c M examples/stream-server.c 2 files changed, 30 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-netif refs/changes/25/35925/1
diff --git a/examples/stream-client.c b/examples/stream-client.c index e42748f..f17a7d8 100644 --- a/examples/stream-client.c +++ b/examples/stream-client.c @@ -32,8 +32,11 @@
static struct osmo_stream_cli *conn;
-void sighandler(int foo) +static void sighandler(int sigset) { + if (sigset == SIGPIPE || sigset == SIGHUP) + return; + LOGP(DSTREAMTEST, LOGL_NOTICE, "closing stream.\n"); exit(EXIT_SUCCESS); } @@ -150,6 +153,11 @@
LOGP(DSTREAMTEST, LOGL_NOTICE, "Entering main loop\n");
+ signal(SIGINT, sighandler); + signal(SIGHUP, sighandler); + signal(SIGTERM, sighandler); + signal(SIGPIPE, sighandler); + while(1) { osmo_select_main(0); } diff --git a/examples/stream-server.c b/examples/stream-server.c index 9faf307..26dff95 100644 --- a/examples/stream-server.c +++ b/examples/stream-server.c @@ -36,8 +36,11 @@ static struct osmo_stream_srv *conn;
-void sighandler(int foo) +static void sighandler(int sigset) { + if (sigset == SIGPIPE || sigset == SIGHUP) + return; + LOGP(DSTREAMTEST, LOGL_NOTICE, "closing STREAMSERVER.\n"); exit(EXIT_SUCCESS); } @@ -166,6 +169,11 @@ osmo_fd_setup(kbd_ofd, STDIN_FILENO, OSMO_FD_READ, kbd_cb, srv, 0); osmo_fd_register(kbd_ofd);
+ signal(SIGINT, sighandler); + signal(SIGHUP, sighandler); + signal(SIGTERM, sighandler); + signal(SIGPIPE, sighandler); + LOGP(DSTREAMTEST, LOGL_NOTICE, "Entering main loop on %s\n", osmo_stream_srv_link_get_sockname(srv));
while(1) {