--- src/rc/start-stop-daemon.c +++ src/rc/start-stop-daemon.c @@ -658,6 +658,8 @@ mode_t numask; char **margv; unsigned int start_wait = 0; + bool retry = false; + char *retry_opt = NULL; TAILQ_INIT(&schedule); #ifdef DEBUG_MEMORY @@ -694,7 +696,13 @@ break; case 'R': /* --retry | */ - parse_schedule(optarg, sig); + retry = true; + if(retry_opt) + free(retry_opt); + if(optarg) + retry_opt = xstrdup(optarg); + else + retry_opt = NULL; break; case 'S': /* --start */ @@ -837,6 +845,15 @@ sig != SIGKILL) oknodo = true; + if (stop && !sig) + sig = SIGTERM; + + if (retry) { + parse_schedule(retry_opt, sig); + if (retry_opt) + free(retry_opt); + } + if (!exec) exec = startas; else if (!name) @@ -853,7 +870,7 @@ else if (exec) *--argv = exec; - if (stop || sig) { + if (sig) { if (!*argv && !pidfile && !name && !uid) eerrorx("%s: --stop needs --exec, --pidfile," " --name or --user", applet); @@ -954,9 +971,7 @@ } margv = nav ? nav : argv; - if (stop || sig) { - if (!sig) - sig = SIGTERM; + if (sig) { if (!stop) oknodo = true; if (!TAILQ_FIRST(&schedule)) {