gst_init exceptions when it is used in a dynamic lib which is loaded by dlopen

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

gst_init exceptions when it is used in a dynamic lib which is loaded by dlopen

Halley Zhao
Hi experts:
I created a dynamic lib to use gst, and the lib is loaded by dlopen.
then there is exception to load the lib for a second playback.

1. if I call gst_deinit() before dlclose the lib. I fail to create any gst element next time after calling gst_init() again.  gst_init_check() said gst has already been inited.

0:00:08.140795000  5131 0xffff98003e90 DEBUG               GST_INIT gst.c:417:gst_init_check: already initialized gst
0:00:08.140939875  5131 0xffff98003e90 WARN     GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "appsrc"!

2. if I skip call gst_deinit() before dlclose the lib, some exception comes for g_type_check
(gdb) bt
#0  0x0000ffffbeb67dd8 in strcmp () from /usr/lib64/libc.so.6
#1  0x0000ffffbf16ba5c in g_str_equal () from /usr/lib64/libglib-2.0.so
#2  0x0000ffffbf16af08 in g_hash_table_lookup ()
   from /usr/lib64/libglib-2.0.so
#3  0x0000ffffbf18d648 in g_intern_static_string ()
   from /usr/lib64/libglib-2.0.so
#4  0x0000ffffb70548dc in gst_audio_clock_get_type ()
   from /usr/lib64/libgstaudio-1.0.so.0
#5  0x0000ffffb705494c in gst_audio_clock_new ()
   from /usr/lib64/libgstaudio-1.0.so.0

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: gst_init exceptions when it is used in a dynamic lib which is loaded by dlopen

Halley Zhao
我把gst_init/gst_deinit移到了动态库的外部,也就是进程仅做一次gst_init/gst_deinit.
然后出现创想GstAudioClock的时候失败:
(cowplayer_test:5466): GLib-GObject-WARNING **: cannot register existing type 'GstAudioClock'
(cowplayer_test:5466): GLib-CRITICAL **: g_once_init_leave: assertion 'result != 0' failed
(cowplayer_test:5466): GLib-GObject-CRITICAL **: g_object_new: assertion 'G_TYPE_IS_OBJECT (object_type)' failed

Halley Zhao <[hidden email]> 于2019年6月20日周四 下午6:05写道:
Hi experts:
I created a dynamic lib to use gst, and the lib is loaded by dlopen.
then there is exception to load the lib for a second playback.

1. if I call gst_deinit() before dlclose the lib. I fail to create any gst element next time after calling gst_init() again.  gst_init_check() said gst has already been inited.

0:00:08.140795000  5131 0xffff98003e90 DEBUG               GST_INIT gst.c:417:gst_init_check: already initialized gst
0:00:08.140939875  5131 0xffff98003e90 WARN     GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "appsrc"!

2. if I skip call gst_deinit() before dlclose the lib, some exception comes for g_type_check
(gdb) bt
#0  0x0000ffffbeb67dd8 in strcmp () from /usr/lib64/libc.so.6
#1  0x0000ffffbf16ba5c in g_str_equal () from /usr/lib64/libglib-2.0.so
#2  0x0000ffffbf16af08 in g_hash_table_lookup ()
   from /usr/lib64/libglib-2.0.so
#3  0x0000ffffbf18d648 in g_intern_static_string ()
   from /usr/lib64/libglib-2.0.so
#4  0x0000ffffb70548dc in gst_audio_clock_get_type ()
   from /usr/lib64/libgstaudio-1.0.so.0
#5  0x0000ffffb705494c in gst_audio_clock_new ()
   from /usr/lib64/libgstaudio-1.0.so.0

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: gst_init exceptions when it is used in a dynamic lib which is loaded by dlopen

Nicolas Dufresne-5
In reply to this post by Halley Zhao


Le jeu. 20 juin 2019 06 h 10, Halley Zhao <[hidden email]> a écrit :
Hi experts:
I created a dynamic lib to use gst, and the lib is loaded by dlopen.
then there is exception to load the lib for a second playback.

GStreamer (and glib) cannot be loaded twice.


1. if I call gst_deinit() before dlclose the lib. I fail to create any gst element next time after calling gst_init() again.  gst_init_check() said gst has already been inited.

gst_deinit() is only there for debugging.


0:00:08.140795000  5131 0xffff98003e90 DEBUG               GST_INIT gst.c:417:gst_init_check: already initialized gst
0:00:08.140939875  5131 0xffff98003e90 WARN     GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "appsrc"!

2. if I skip call gst_deinit() before dlclose the lib, some exception comes for g_type_check
(gdb) bt
#0  0x0000ffffbeb67dd8 in strcmp () from /usr/lib64/libc.so.6
#1  0x0000ffffbf16ba5c in g_str_equal () from /usr/lib64/libglib-2.0.so
#2  0x0000ffffbf16af08 in g_hash_table_lookup ()
   from /usr/lib64/libglib-2.0.so
#3  0x0000ffffbf18d648 in g_intern_static_string ()
   from /usr/lib64/libglib-2.0.so
#4  0x0000ffffb70548dc in gst_audio_clock_get_type ()
   from /usr/lib64/libgstaudio-1.0.so.0
#5  0x0000ffffb705494c in gst_audio_clock_new ()
   from /usr/lib64/libgstaudio-1.0.so.0
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: gst_init exceptions when it is used in a dynamic lib which is loaded by dlopen

Halley Zhao
In reply to this post by Halley Zhao
translate it:

I tried to move gst_init/gst_deinit outside of the dynamic lib, it means gst_init/gst_deinit is done once in the process.
then, there is error to create GstAudioClock for the second run. I guess there are some static data for g_type/gstreamer which isn't de-inited after dlclose().

(cowplayer_test:5466): GLib-GObject-WARNING **: cannot register existing type 'GstAudioClock'
(cowplayer_test:5466): GLib-CRITICAL **: g_once_init_leave: assertion 'result != 0' failed
(cowplayer_test:5466): GLib-GObject-CRITICAL **: g_object_new: assertion 'G_TYPE_IS_OBJECT (object_type)' failed

Halley Zhao <[hidden email]> 于2019年6月20日周四 下午6:29写道:
我把gst_init/gst_deinit移到了动态库的外部,也就是进程仅做一次gst_init/gst_deinit.
然后出现创想GstAudioClock的时候失败:
(cowplayer_test:5466): GLib-GObject-WARNING **: cannot register existing type 'GstAudioClock'
(cowplayer_test:5466): GLib-CRITICAL **: g_once_init_leave: assertion 'result != 0' failed
(cowplayer_test:5466): GLib-GObject-CRITICAL **: g_object_new: assertion 'G_TYPE_IS_OBJECT (object_type)' failed

Halley Zhao <[hidden email]> 于2019年6月20日周四 下午6:05写道:
Hi experts:
I created a dynamic lib to use gst, and the lib is loaded by dlopen.
then there is exception to load the lib for a second playback.

1. if I call gst_deinit() before dlclose the lib. I fail to create any gst element next time after calling gst_init() again.  gst_init_check() said gst has already been inited.

0:00:08.140795000  5131 0xffff98003e90 DEBUG               GST_INIT gst.c:417:gst_init_check: already initialized gst
0:00:08.140939875  5131 0xffff98003e90 WARN     GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "appsrc"!

2. if I skip call gst_deinit() before dlclose the lib, some exception comes for g_type_check
(gdb) bt
#0  0x0000ffffbeb67dd8 in strcmp () from /usr/lib64/libc.so.6
#1  0x0000ffffbf16ba5c in g_str_equal () from /usr/lib64/libglib-2.0.so
#2  0x0000ffffbf16af08 in g_hash_table_lookup ()
   from /usr/lib64/libglib-2.0.so
#3  0x0000ffffbf18d648 in g_intern_static_string ()
   from /usr/lib64/libglib-2.0.so
#4  0x0000ffffb70548dc in gst_audio_clock_get_type ()
   from /usr/lib64/libgstaudio-1.0.so.0
#5  0x0000ffffb705494c in gst_audio_clock_new ()
   from /usr/lib64/libgstaudio-1.0.so.0

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: gst_init exceptions when it is used in a dynamic lib which is loaded by dlopen

Nicolas Dufresne-5


Le jeu. 20 juin 2019 08 h 40, Halley Zhao <[hidden email]> a écrit :
translate it:

I tried to move gst_init/gst_deinit outside of the dynamic lib, it means gst_init/gst_deinit is done once in the process.
then, there is error to create GstAudioClock for the second run. I guess there are some static data for g_type/gstreamer which isn't de-inited after dlclose().

GStreamer or Glib DLL/so cannot be loaded twice (didn't I say that already?). Just load and leak it to avoid these errors.



(cowplayer_test:5466): GLib-GObject-WARNING **: cannot register existing type 'GstAudioClock'
(cowplayer_test:5466): GLib-CRITICAL **: g_once_init_leave: assertion 'result != 0' failed
(cowplayer_test:5466): GLib-GObject-CRITICAL **: g_object_new: assertion 'G_TYPE_IS_OBJECT (object_type)' failed

Halley Zhao <[hidden email]> 于2019年6月20日周四 下午6:29写道:
我把gst_init/gst_deinit移到了动态库的外部,也就是进程仅做一次gst_init/gst_deinit.
然后出现创想GstAudioClock的时候失败:
(cowplayer_test:5466): GLib-GObject-WARNING **: cannot register existing type 'GstAudioClock'
(cowplayer_test:5466): GLib-CRITICAL **: g_once_init_leave: assertion 'result != 0' failed
(cowplayer_test:5466): GLib-GObject-CRITICAL **: g_object_new: assertion 'G_TYPE_IS_OBJECT (object_type)' failed

Halley Zhao <[hidden email]> 于2019年6月20日周四 下午6:05写道:
Hi experts:
I created a dynamic lib to use gst, and the lib is loaded by dlopen.
then there is exception to load the lib for a second playback.

1. if I call gst_deinit() before dlclose the lib. I fail to create any gst element next time after calling gst_init() again.  gst_init_check() said gst has already been inited.

0:00:08.140795000  5131 0xffff98003e90 DEBUG               GST_INIT gst.c:417:gst_init_check: already initialized gst
0:00:08.140939875  5131 0xffff98003e90 WARN     GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "appsrc"!

2. if I skip call gst_deinit() before dlclose the lib, some exception comes for g_type_check
(gdb) bt
#0  0x0000ffffbeb67dd8 in strcmp () from /usr/lib64/libc.so.6
#1  0x0000ffffbf16ba5c in g_str_equal () from /usr/lib64/libglib-2.0.so
#2  0x0000ffffbf16af08 in g_hash_table_lookup ()
   from /usr/lib64/libglib-2.0.so
#3  0x0000ffffbf18d648 in g_intern_static_string ()
   from /usr/lib64/libglib-2.0.so
#4  0x0000ffffb70548dc in gst_audio_clock_get_type ()
   from /usr/lib64/libgstaudio-1.0.so.0
#5  0x0000ffffb705494c in gst_audio_clock_new ()
   from /usr/lib64/libgstaudio-1.0.so.0
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel