[Spice-devel] [PATCH spice-gtk] Add call of gst_deinit at program exit

Frediano Ziglio fziglio at redhat.com
Thu Oct 19 11:47:24 UTC 2017


> > On 19 Oct 2017, at 12:32, Frediano Ziglio < fziglio at redhat.com > wrote:
> 

> > > From: Christophe de Dinechin < dinechin at redhat.com >
> > 
> 

> > > This is useful for some instrumentation, e.g. the leaks tracer,
> > 
> 
> > > that perform some of their operations within gst_deinit.
> > 
> 

> > > Without this patch, if you run spicy with
> > 
> 
> > > GST_DEBUG="GST_TRACER:7" GST_TRACERS="leaks" spicy ...
> > 
> 
> > > the leak tracer does not run at exit, because it runs in gst_deinit.
> > 
> 

> > > Signed-off-by: Christophe de Dinechin < dinechin at redhat.com >
> > 
> 
> > > ---
> > 
> 
> > > spice-common | 2 +-
> > 
> 
> > > src/channel-display-gst.c | 1 +
> > 
> 
> > > 2 files changed, 2 insertions(+), 1 deletion(-)
> > 
> 

> > > diff --git a/spice-common b/spice-common
> > 
> 
> > > index 429ad96..ba11de3 160000
> > 
> 
> > > --- a/spice-common
> > 
> 
> > > +++ b/spice-common
> > 
> 
> > > @@ -1 +1 @@
> > 
> 
> > > -Subproject commit 429ad965371ceaaf60b81ccbed7da660ef9e0a94
> > 
> 
> > > +Subproject commit ba11de3f3fd58d1b1a99bb62dd9e409e9961a78e
> > 
> 
> > > diff --git a/src/channel-display-gst.c b/src/channel-display-gst.c
> > 
> 
> > > index f978602..c9ab9bf 100644
> > 
> 
> > > --- a/src/channel-display-gst.c
> > 
> 
> > > +++ b/src/channel-display-gst.c
> > 
> 
> > > @@ -578,6 +578,7 @@ static gboolean gstvideo_init(void)
> > 
> 
> > > GError *err = NULL;
> > 
> 
> > > if (gst_init_check(NULL, NULL, &err)) {
> > 
> 
> > > success = 1;
> > 
> 
> > > + atexit(gst_deinit);
> > 
> 
> > > } else {
> > 
> 
> > > spice_warning("Disabling GStreamer video support: %s",
> > 
> 
> > > err->message);
> > 
> 
> > > g_clear_error(&err);
> > 
> 

> > Calling atexit from a library is a bad idea.
> 

> Could you elaborate?

> I do not really agree with this statement. I’d actually go as far as saying
> that libraries are the reason atexit exists to start with.
> Apparently, I’m not alone, see first three responses in
> https://stackoverflow.com/questions/25115612/whats-the-scenario-to-use-atexit-function
> that all mention libraries.

> Christophe

Shared libraries in theory can be unloaded before the atexit function is called for instance. 

Calling gst_deinit from a library is a bad idea because other part of the program could use 
gstreamer too and call other gstreamer functions. Even after your atexit function! 

The gcc way to catch shared library unload is to use the destructor attribute which in 
Unix usually chain the .deinit/deinit function. Also has the advantage of not using space 
(atexit function calls are usually limited as in many systems the buffer used to register 
them is static). 

Frediano 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20171019/46d928e8/attachment.html>


More information about the Spice-devel mailing list