[FFmpeg-devel] "OPW Qualification Task: Enable daemon mode for FFserver"

Michael Niedermayer michaelni at gmx.at
Fri Oct 31 22:25:59 CET 2014


On Fri, Oct 31, 2014 at 11:32:37PM +0530, Binathi Bingi wrote:
> Hello
> 
> I tried to include the changes specified by Nicholas.
> We can switch between both Daemon and NoDaemon mode, using the option in
> ffserver.conf file.
> 
> From 018f8c1e1acf062a9e6a3ec94f671d574ec4b712 Mon Sep 17 00:00:00 2001
> From: Binathi <binti179 at gmail.com>
> Date: Fri, 31 Oct 2014 23:27:20 +0530
> Subject: [PATCH] Enable Daemon mode for FFServer
> 
> Signed-off-by: Binathi <binti179 at gmail.com>
> ---
>  doc/ffserver.conf |  4 ++++
>  doc/ffserver.texi |  7 +++++--
>  ffserver.c        | 31 +++++++++++++++++++++++++++++--
>  ffserver_config.c |  7 +++++--
>  ffserver_config.h |  1 +
>  5 files changed, 44 insertions(+), 6 deletions(-)
> 
> diff --git a/doc/ffserver.conf b/doc/ffserver.conf
> index b756961..eac088b 100644
> --- a/doc/ffserver.conf
> +++ b/doc/ffserver.conf
> @@ -25,6 +25,10 @@ MaxBandwidth 1000
>  # '-' is the standard output.
>  CustomLog -
> 
> +# Suppress Daemon if you don't want to launch ffserver in daemon mode.
> +#NoDaemon
> +Daemon
> +
>  ##################################################################
>  # Definition of the live feeds. Each live feed contains one video
>  # and/or audio sequence coming from an ffmpeg encoder or another
> diff --git a/doc/ffserver.texi b/doc/ffserver.texi
> index 77273d2..15dc4b3 100644
> --- a/doc/ffserver.texi
> +++ b/doc/ffserver.texi
> @@ -406,8 +406,11 @@ ignored, and the log is written to standard output.
> 
>  @item NoDaemon
>  Set no-daemon mode. This option is currently ignored since now
> - at command{ffserver} will always work in no-daemon mode, and is
> -deprecated.
> + at command{ffserver} will always work in daemon mode.
> +
> +@ Daemon
> +Set daemon mode.
> + at command{ffserver} will always work in daemon mode. To enable no-daemon
> mode, suppress this and enable NoDaemon.
>  @end table

it seems the patch has been mangled


> 
>  @section Feed section
> diff --git a/ffserver.c b/ffserver.c
> index ea2a2ae..d6eb0b4 100644
> --- a/ffserver.c
> +++ b/ffserver.c
> @@ -3671,6 +3671,7 @@ static void handle_child_exit(int sig)
>  static void opt_debug(void)
>  {
>      config.debug = 1;
> +    config.ffserver_daemon = 0;
>      snprintf(config.logfilename, sizeof(config.logfilename), "-");
>  }
> 
> @@ -3736,10 +3737,36 @@ int main(int argc, char **argv)
>      build_feed_streams();
> 
>      compute_bandwidth();
> -
> +
> +    if (config.ffserver_daemon) {
> +    int ffserver_id = 0;
> +    pid_t sid = 0;
> +
> +    ffserver_id = fork();

there is something wrong with the indention here
the code inside the if() probably should be indented by 4 more spaces


> +
> +    if (ffserver_id < 0) {
> +        av_log(NULL, AV_LOG_WARNING, "Fork failed!Couldn't launch ffserver
> in daemon mode.\n");

IIRC Nicolas suggested to print the error corresponding to
errno, that is not a fixed string.



> +        exit(1);
> +    }
> +
> +    if (ffserver_id > 0) {
> +        exit(0);
> +    }
> +
> +    sid = setsid();
> +    if (sid < 0) {
> +        exit(1);
> +    }
> +
> +    open ("/dev/null", O_RDWR);
> +
> +    if (strcmp(config.logfilename, "-") != 0) {
> +            close(1);
> +        }
> +    }
>      /* signal init */
>      signal(SIGPIPE, SIG_IGN);
> -
> +
>      if (http_server() < 0) {
>          http_log("Could not start server\n");
>          exit(1);
> diff --git a/ffserver_config.c b/ffserver_config.c
> index e44cdf7..f46d8f4 100644
> --- a/ffserver_config.c
> +++ b/ffserver_config.c
> @@ -358,8 +358,11 @@ static int ffserver_parse_config_global(FFServerConfig
> *config, const char *cmd,
>          ffserver_get_arg(arg, sizeof(arg), p);
>          if (resolve_host(&config->http_addr.sin_addr, arg) != 0)
>              ERROR("%s:%d: Invalid host/IP address: %s\n", arg);
> -    } else if (!av_strcasecmp(cmd, "NoDaemon")) {
> -        WARNING("NoDaemon option has no effect, you should remove it\n");
> +    } else if (!av_strcasecmp(cmd, "Daemon") || !av_strcasecmp(cmd,
> "NoDaemon")) {
> +        if (!av_strcasecmp(cmd, "Daemon"))
> +            config->ffserver_daemon = 1;
> +        if (!av_strcasecmp(cmd, "NoDaemon"))
> +            config->ffserver_daemon = 0;

why the 2 level duplicated comparission, a simple addition of a check
for "Daemon" should be simpler


[...]

Thanks

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Freedom in capitalist society always remains about the same as it was in
ancient Greek republics: Freedom for slave owners. -- Vladimir Lenin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20141031/13a89a9f/attachment.asc>


More information about the ffmpeg-devel mailing list