2013/5/5 PCMan <pcman...@gmail.com>

> On Sun, May 5, 2013 at 2:15 AM, Igor Azevedo <igor.azev...@neticle.pt>
> wrote:
> > 2013/5/4 Luca Bruno <lethalma...@gmail.com>
> >
> >> On Sat, May 4, 2013 at 6:29 PM, Igor Azevedo <igor.azev...@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.
>

What I'm really trying to accomplish here is reloading a certain external
plugin (as there might have been changes to it) without having to restart
my application. I don't really mind if the GTypes stay registered, as long
as it doesn't bother me when I'm reloading the lib. Is there absolutely no
way to do this?

TypeModule seems to be able to reload the library without having issues
regarding the registration of GTypes, how is this being done?
_______________________________________________
vala-list mailing list
vala-list@gnome.org
https://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to