
On 13.10.2016 18:04, Martin Kletzander wrote:
On Wed, Oct 12, 2016 at 04:00:52PM -0400, Dawid Zamirski wrote:
On Tue, 2016-10-11 at 10:58 -0400, Dawid Zamirski wrote:
On Tue, 2016-10-11 at 16:22 +0200, Martin Kletzander wrote:
On Wed, Sep 28, 2016 at 01:41:35PM -0400, Dawid Zamirski wrote:
The allocation is not guarded by any lock, so there's still a race. I think there should be a global struct that has only some lock in it and whatever global data you need, the struct will be initialized on the first call to any function (check out VIR_ONCE_GLOBAL_INIT) and then the connection (or global data or how it's called) would be reference counted (just like you have). It's just that having the reference count in the object you will be reallocating over and over again for each connection is not really good.
Thanks, I see, I'll address this in v2
So after my initial attempts at handling this as suggested (create vboxDriver struct and initialize in VIR_ONCE_GLOBAL_INIT), I've stumbled upon virStateDriver structs used in other drivers that apparently has .stateInitialize, .stateCleanup that to me look like perfect places to call vbox's pfnComInitialize pfnComUnintialize pairs. Would this be a good idea to utilize the virStateDriver for this or should I stick with VIR_ONCE_GLOBAL_INIT way?
I just now realized you said the issue we are talking about crashes the libvirt daemon, right? And it does not use virStateDriver? That's weird. You are connecting to vbox:///session, but the crash happens in the libvirt daemon. That means we switched the vbox driver to the daemo-side driver, so I'd expect it to be stateful driver.
Yes, couple of drivers were switched to server side drivers because of some licensing nonsense.
However it doesn't use virStateDriver.
That's because vbox is stateless driver. Just like esx for instance. Michal