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

Halley Zhao aihua.halley.zhao at gmail.com
Thu Jun 20 12:27:08 UTC 2019


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 <aihua.halley.zhao at gmail.com> 于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 <aihua.halley.zhao at gmail.com> 于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
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20190620/e9c83797/attachment-0001.html>


More information about the gstreamer-devel mailing list