Hi,
I got a problem when using GModule before. It has been fixed by using 'g_type_init()' but I don't know what 'g_type_init()' does exactly.
My situation was as follows:
My application uses GModule to load shared library, which depends on libsoup, and unload it. There is no problem up to now. But "GLib-GObject-WARNING **: cannot register existing type `SoupSession'...." error message occurred when trying to reload the library. My application already called 'g_type_init()' in main() function at startup.
'g_type_register_static()' is used in libsoup. I think that lisoup trying to re register it's type (SoupSession) when closing&reloading the library even though it has been already registered.
I have found that dlopen&dlclose should be avoided in this case when googling.
However, above problem was solved simply by adding 'g_type_init()' in the source code of shared library. Whenever reloading the library, 'g_type_init()' will be called again and again.
This is right way to solve the problem??? What dose 'g_type_init()' do when it is called again? Does it remap the memory of all GType or remap only 'SoupSesion'? Can anyone explain this in detail??