Package: kamailio
Version: 5.1.0-1
Severity: normal
Tags: patch

Hi!

The current init script does not wait for the process to finish when
doing a stop, this can break on certain conditions or when the daemon
is very slow to stop. As a new start might consider the service is
already running, exit with success, and then the old instance
terminates, leaving us with nothing being executed.

The attached patch should solve this. If you consider the timeout of 5
to be too quick we can always increment it.

I've not patched the alpine init script because that one uses the
s-s-d implementation coming from openrc, and I've got no idea how that
behaves. :)

Thanks,
Guillem
From 5dfe7bab3e6ef4196e35c1d5d855f0a2b693bc80 Mon Sep 17 00:00:00 2001
From: Guillem Jover <gjo...@sipwise.com>
Date: Tue, 6 Feb 2018 18:22:51 +0100
Subject: [PATCH] Wait for kamailio to exit before returning on sysvinit stop
 action

We should not return until the service has been fully terminated,
otherwise a subsequent start might break as it can consider itself
as already running. And once the old instance stops there's nothing
left running.

This also makes it possibe to remove a sleep in the restart action.
---
 debian/kamailio.init                   | 3 +--
 pkg/kamailio/deb/buster/kamailio.init  | 3 +--
 pkg/kamailio/deb/debian/kamailio.init  | 3 +--
 pkg/kamailio/deb/jessie/kamailio.init  | 3 +--
 pkg/kamailio/deb/precise/kamailio.init | 3 +--
 pkg/kamailio/deb/sid/kamailio.init     | 3 +--
 pkg/kamailio/deb/stretch/kamailio.init | 3 +--
 pkg/kamailio/deb/trusty/kamailio.init  | 3 +--
 pkg/kamailio/deb/wheezy/kamailio.init  | 3 +--
 pkg/kamailio/deb/xenial/kamailio.init  | 3 +--
 10 files changed, 10 insertions(+), 20 deletions(-)

diff --git a/debian/kamailio.init b/debian/kamailio.init
index a0777c29..dd576467 100644
--- a/debian/kamailio.init
+++ b/debian/kamailio.init
@@ -113,14 +113,13 @@ case "$1" in
   stop)
 	log_daemon_msg "Stopping $DESC: $NAME"
 	start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
-		--exec $DAEMON
+		--exec $DAEMON --retry 5
 	log_end_msg 0
 	;;
   restart|force-reload)
 	check_kamailio_config
 
 	$0 stop
-	sleep 1
 	$0 start
 	;;
   status)
diff --git a/pkg/kamailio/deb/buster/kamailio.init b/pkg/kamailio/deb/buster/kamailio.init
index b14f83a7..09ca0800 100644
--- a/pkg/kamailio/deb/buster/kamailio.init
+++ b/pkg/kamailio/deb/buster/kamailio.init
@@ -137,7 +137,7 @@ case "$1" in
   stop)
 	log_daemon_msg "Stopping $DESC: $NAME"
 	start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
-		--exec $DAEMON
+		--exec $DAEMON --retry 5
 	log_end_msg 0
 	;;
   restart|force-reload)
@@ -145,7 +145,6 @@ case "$1" in
 	create_radius_seqfile
 
 	$0 stop
-	sleep 1
 	$0 start
 	;;
   status)
diff --git a/pkg/kamailio/deb/debian/kamailio.init b/pkg/kamailio/deb/debian/kamailio.init
index b14f83a7..09ca0800 100644
--- a/pkg/kamailio/deb/debian/kamailio.init
+++ b/pkg/kamailio/deb/debian/kamailio.init
@@ -137,7 +137,7 @@ case "$1" in
   stop)
 	log_daemon_msg "Stopping $DESC: $NAME"
 	start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
-		--exec $DAEMON
+		--exec $DAEMON --retry 5
 	log_end_msg 0
 	;;
   restart|force-reload)
@@ -145,7 +145,6 @@ case "$1" in
 	create_radius_seqfile
 
 	$0 stop
-	sleep 1
 	$0 start
 	;;
   status)
diff --git a/pkg/kamailio/deb/jessie/kamailio.init b/pkg/kamailio/deb/jessie/kamailio.init
index b14f83a7..09ca0800 100644
--- a/pkg/kamailio/deb/jessie/kamailio.init
+++ b/pkg/kamailio/deb/jessie/kamailio.init
@@ -137,7 +137,7 @@ case "$1" in
   stop)
 	log_daemon_msg "Stopping $DESC: $NAME"
 	start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
-		--exec $DAEMON
+		--exec $DAEMON --retry 5
 	log_end_msg 0
 	;;
   restart|force-reload)
@@ -145,7 +145,6 @@ case "$1" in
 	create_radius_seqfile
 
 	$0 stop
-	sleep 1
 	$0 start
 	;;
   status)
diff --git a/pkg/kamailio/deb/precise/kamailio.init b/pkg/kamailio/deb/precise/kamailio.init
index b14f83a7..09ca0800 100644
--- a/pkg/kamailio/deb/precise/kamailio.init
+++ b/pkg/kamailio/deb/precise/kamailio.init
@@ -137,7 +137,7 @@ case "$1" in
   stop)
 	log_daemon_msg "Stopping $DESC: $NAME"
 	start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
-		--exec $DAEMON
+		--exec $DAEMON --retry 5
 	log_end_msg 0
 	;;
   restart|force-reload)
@@ -145,7 +145,6 @@ case "$1" in
 	create_radius_seqfile
 
 	$0 stop
-	sleep 1
 	$0 start
 	;;
   status)
diff --git a/pkg/kamailio/deb/sid/kamailio.init b/pkg/kamailio/deb/sid/kamailio.init
index b14f83a7..09ca0800 100644
--- a/pkg/kamailio/deb/sid/kamailio.init
+++ b/pkg/kamailio/deb/sid/kamailio.init
@@ -137,7 +137,7 @@ case "$1" in
   stop)
 	log_daemon_msg "Stopping $DESC: $NAME"
 	start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
-		--exec $DAEMON
+		--exec $DAEMON --retry 5
 	log_end_msg 0
 	;;
   restart|force-reload)
@@ -145,7 +145,6 @@ case "$1" in
 	create_radius_seqfile
 
 	$0 stop
-	sleep 1
 	$0 start
 	;;
   status)
diff --git a/pkg/kamailio/deb/stretch/kamailio.init b/pkg/kamailio/deb/stretch/kamailio.init
index b14f83a7..09ca0800 100644
--- a/pkg/kamailio/deb/stretch/kamailio.init
+++ b/pkg/kamailio/deb/stretch/kamailio.init
@@ -137,7 +137,7 @@ case "$1" in
   stop)
 	log_daemon_msg "Stopping $DESC: $NAME"
 	start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
-		--exec $DAEMON
+		--exec $DAEMON --retry 5
 	log_end_msg 0
 	;;
   restart|force-reload)
@@ -145,7 +145,6 @@ case "$1" in
 	create_radius_seqfile
 
 	$0 stop
-	sleep 1
 	$0 start
 	;;
   status)
diff --git a/pkg/kamailio/deb/trusty/kamailio.init b/pkg/kamailio/deb/trusty/kamailio.init
index b14f83a7..09ca0800 100644
--- a/pkg/kamailio/deb/trusty/kamailio.init
+++ b/pkg/kamailio/deb/trusty/kamailio.init
@@ -137,7 +137,7 @@ case "$1" in
   stop)
 	log_daemon_msg "Stopping $DESC: $NAME"
 	start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
-		--exec $DAEMON
+		--exec $DAEMON --retry 5
 	log_end_msg 0
 	;;
   restart|force-reload)
@@ -145,7 +145,6 @@ case "$1" in
 	create_radius_seqfile
 
 	$0 stop
-	sleep 1
 	$0 start
 	;;
   status)
diff --git a/pkg/kamailio/deb/wheezy/kamailio.init b/pkg/kamailio/deb/wheezy/kamailio.init
index b14f83a7..09ca0800 100644
--- a/pkg/kamailio/deb/wheezy/kamailio.init
+++ b/pkg/kamailio/deb/wheezy/kamailio.init
@@ -137,7 +137,7 @@ case "$1" in
   stop)
 	log_daemon_msg "Stopping $DESC: $NAME"
 	start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
-		--exec $DAEMON
+		--exec $DAEMON --retry 5
 	log_end_msg 0
 	;;
   restart|force-reload)
@@ -145,7 +145,6 @@ case "$1" in
 	create_radius_seqfile
 
 	$0 stop
-	sleep 1
 	$0 start
 	;;
   status)
diff --git a/pkg/kamailio/deb/xenial/kamailio.init b/pkg/kamailio/deb/xenial/kamailio.init
index b14f83a7..09ca0800 100644
--- a/pkg/kamailio/deb/xenial/kamailio.init
+++ b/pkg/kamailio/deb/xenial/kamailio.init
@@ -137,7 +137,7 @@ case "$1" in
   stop)
 	log_daemon_msg "Stopping $DESC: $NAME"
 	start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
-		--exec $DAEMON
+		--exec $DAEMON --retry 5
 	log_end_msg 0
 	;;
   restart|force-reload)
@@ -145,7 +145,6 @@ case "$1" in
 	create_radius_seqfile
 
 	$0 stop
-	sleep 1
 	$0 start
 	;;
   status)
-- 
2.16.1.315.g94e5d3ead4

Reply via email to