[Spice-devel] [PATCH spice-streaming-agent] Detect and handle exception creating capture engine

Christophe de Dinechin christophe.de.dinechin at gmail.com
Tue Feb 20 16:58:41 UTC 2018



> On 20 Feb 2018, at 17:49, Frediano Ziglio <fziglio at redhat.com> wrote:
> 
> Currently exception from a plugin are not handled when creating
> a capture engine.
> Capture the exception and try to use another plugin instead of
> bailing out.
> This was tested with an experimental GStreamer plugin.
> 
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
> src/concrete-agent.cpp | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp
> index 0720782..112ef93 100644
> --- a/src/concrete-agent.cpp
> +++ b/src/concrete-agent.cpp
> @@ -113,7 +113,14 @@ FrameCapture *ConcreteAgent::GetBestFrameCapture(const std::set<SpiceVideoCodecT
>         // check client supports the codec
>         if (codecs.find(plugin.second->VideoCodecType()) == codecs.end())
>             continue;
> -        FrameCapture *capture = plugin.second->CreateCapture();
> +
> +        FrameCapture *capture;
> +        try {
> +            capture = plugin.second->CreateCapture();
> +        } catch (const std::runtime_error &err) {
> +            syslog(LOG_ERR, "Error getting capture engine: %s", err.what());
> +            continue;
> +        }

I noticed that you usually capture std::runtime_error. Why not std::exception? You still get “what”, and that lets you catch bad_alloc too.

>         if (capture) {
>             return capture;
>         }
> -- 
> 2.14.3
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel



More information about the Spice-devel mailing list