Efficient UNO component linkage & GC ...

Matúš Kukan matus.kukan at collabora.com
Sun Jan 26 23:42:25 PST 2014


On Fri, 2014-01-24 at 17:36 +0100, Stephan Bergmann wrote:
> On 01/23/2014 10:29 AM, Matúš Kukan wrote:
> > On Fri, 2014-01-17 at 10:18 +0100, Stephan Bergmann wrote:
> >> On 01/16/2014 06:52 PM, Stephan Bergmann wrote:
> > Ah, so it seems that Singleton::get(context).instance does not work
> > always. In framework, there are many one instance services, and when I
> > tried to use static Singleton class in ctor function for e.g.
> > framework::Desktop, I get various crashes on atexit.
> 
> Yes, as stated on IRC, "in the old scheme, disposing the service mgr it 
> would have disposed the implementation's singleinstancefactory object, 
> which would have destroyed the singleton object; we need to mimic that 
> via the singleton object now implementing XComoponent (which the service 
> mgr will call when it gets disposed) wherever necessary."

Ah, ok, now I think I understand :-)

> >>> ...as they are not only called from the service manager (which takes care of
> >>> singleton constructor functions since 997d21183322a0a94b96868073808841d2773902
> >>> "Support for singleton constructor functions") but potentially also directly
> >>> from cppumaker-generated code (which is the raison d'être for constructor
> >>> functions, after all).
> >
> > AFAICS singletons in generated code don't use constructor functions yet.
> 
> Right, that's still missing.  Do you want to add that (otherwise, I 
> could see to do it sometime next week)?

Yes, I will add that.

> > And maybe it's a good thing.
> > We could use always context->getValueByName("/singletons/<name>"); and
> > it would work ?
> > After changing
> >    css::uno::XInterface *inst = Singleton::get(context).instance.get();
> >    inst->acquire();
> >    return inst;
> > back to
> >    return cppu::acquire(new SfxGlobalEvents_Impl(context));
> 
> But that would completely deprive us of the benefits of using 
> constructor functions for singletons in the first place.

Right, I was confused with disposing, deleting c++ objects etc.
It's proly pointless to explain how, it wouldn't make sense anyway :-)

So, we just need to use true singletons and it will work.

Thanks,

Matus



More information about the LibreOffice mailing list