Re: [Vala] Unregister a GType



On Sun, May 5, 2013 at 2:15 AM, Igor Azevedo <igor azevedo neticle pt> wrote:
2013/5/4 Luca Bruno <lethalman88 gmail com>

On Sat, May 4, 2013 at 6:29 PM, Igor Azevedo <igor azevedo neticle pt>wrote:

Hello,

I'm developing an application that dynamically loads plugins using
GModule.
Each of the plugins registers it's own GTypes but if I load, unload, and
finally reload them I get some errors and the modules don't load properly.

Errors are:

(process:21259): GLib-GObject-WARNING **: cannot register existing type
`NeticleInfinityModulesBaseBaseModule'

I understand why this happens, I'm registering a GType that was already
registered previously when I first loaded the plugin and even after
unloading the module, the types remained registered, so it obviously
fails.

My question is if there is any way to unregister a GType so I can reload
the plugin successfully?


Are you doing this way?
https://live.gnome.org/Vala/TypeModules
https://live.gnome.org/Vala/TypeModuleSample


My implementation was based on the first example you mentioned. Should I
use TypeModule (like in the second example)?

Thanks,
Igor Azevedo

You're not able to unregister a GType no matter it's a dynamic one or not.
Once registered, it should persist until the program terminates.
If you use type module, the type module objects and the types they
registered should not be freed until program termination.

The underlying modules used inside your type module implementation can
be unloaded when they're not needed, but the GType registered persist.
When someone referenced that GType again and GObject type system finds
that the module is not loaded, it tries to load your type module.
So the module can be unloaded, but the GType it registered cannot.

Unfortunately, this is hard to do correctly, and GTypeModule will be
deprecated later.
I talked with a gtk+ developer in #gtk+ channel last time and I'm
informed that GTypeModule will be moved.

So, don't waste your time trying to do that. Once you register a new
GType inside the module, you'd better make it persist and never unload
it.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]