On 11/23/2016 02:01 PM, Dawid Zamirski wrote: > This patch series solves vbox driver thread-safety issues where > libvird process would segfault when there was more than one concurrent > vbox connection. The reason for the segfault was because the original > implementation called pfnComInitialize/Unintialize on each > virConnectOpen/Close calls which were setting pointers to ISession and > IVirtualBox instances that were held by the global g_pVBoxGlobalData. > This caused new connection to overwrite the pointer created by the > prior connection. > > Changes since v2 to address feedback in [1]: > > * call uninitialize when vboxSdkInitialize or vboxExtractVersion fails. > * make sure to set the global vbox_driver pointer to NULL after > virObjectUnref releases last reference, to avoid segfaults when > VBOX_RELEASE is called in unintialize call. > * tested all possible failure paths to make sure libvirtd does not > crash, that is, vboxSdkInitialize has 4 code paths that can possibly > return -1 and made sure all of them are safely handled. > * fixed "unintilalize" typos in code comments and commit messages. > > In other words, the change boils down to: > > if (vboxSdkInitialize() < 0 || vboxExtractVersion() < 0) { > gVBoxAPI.UPFN.Uninitialize(vbox_driver); // call uninit on failure > /* make sure to clear the pointer when last reference was released */ > if (!virObjectUnref(vbox_driver)) > vbox_driver = NULL; // make sure this is NULL > > virMutexUnlock(&vbox_driver_lock); > > return NULL; > } > > [1] https://www.redhat.com/archives/libvir-list/2016-November/msg01132.html > > Dawid Zamirski (2): > vbox: change how vbox API is initialized. > vbox: get rid of g_pVBoxGlobalData > > src/vbox/vbox_common.c | 565 +++++++++++++++++++++++------------------- > src/vbox/vbox_common.h | 2 +- > src/vbox/vbox_driver.c | 1 + > src/vbox/vbox_network.c | 24 +- > src/vbox/vbox_storage.c | 20 +- > src/vbox/vbox_tmpl.c | 434 ++++++++++++++++---------------- > src/vbox/vbox_uniformed_api.h | 110 ++++---- > 7 files changed, 616 insertions(+), 540 deletions(-) > ACK series (and pushed) with an adjustment to news.html.in "Improvements" section to list "vbox: Address thread safety issues" John -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list