[Spice-devel] [PATCH spice-streaming-agent] Detect and handle exception creating capture engine
Christophe de Dinechin
cdupontd at redhat.com
Tue Feb 20 17:23:21 UTC 2018
> On 20 Feb 2018, at 18:05, Frediano Ziglio <fziglio at redhat.com> wrote:
>
>>>
>>> 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;
>>> }
>
> Lot of classes which inherit from std::exception are not normal program
> exceptions but hard cases (beside std::logic_error) which are hard to
> deal with so I prefer to limit to std::runtime_error.
I understand your rationale.
I the next iteration of my top-level cleanup, I plan to introduce a top-level catch for std::exception, where I think it makes sense (i.e we are exiting anyway). So what you are saying is that if there is a bad_allloc in CreateCapture, it’s unsafe to continue, we should throw and let the top-level catch clause deal with it, correct?
>
> Frediano
> _______________________________________________
> 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