mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 21:34:54 +03:00
virsh: Correctly initialize libvirt
virsh didn't call virInitialize(), which (among other things) initializes virLastErr thread local variable. As a result of that, virsh could just segfault in virEventRegisterDefaultImpl() since that is the first call that touches (resets) virLastErr. I have no idea what lucky coincidence made this bug visible but I was able to reproduce it in 100% cases but only in one specific environment which included building in sandbox.
This commit is contained in:
parent
a39376016a
commit
c256542e76
@ -369,6 +369,9 @@ static struct gcry_thread_cbs virTLSThreadImpl = {
|
||||
* in multithreaded applications to avoid potential race when initializing
|
||||
* the library.
|
||||
*
|
||||
* Calling virInitialize is mandatory, unless your first API call is one of
|
||||
* virConnectOpen*.
|
||||
*
|
||||
* Returns 0 in case of success, -1 in case of error
|
||||
*/
|
||||
int
|
||||
|
@ -12985,6 +12985,10 @@ main(int argc, char **argv)
|
||||
char *defaultConn;
|
||||
bool ret = true;
|
||||
|
||||
memset(ctl, 0, sizeof(vshControl));
|
||||
ctl->imode = true; /* default is interactive mode */
|
||||
ctl->log_fd = -1; /* Initialize log file descriptor */
|
||||
|
||||
if (!setlocale(LC_ALL, "")) {
|
||||
perror("setlocale");
|
||||
/* failure to setup locale is not fatal */
|
||||
@ -12998,15 +13002,16 @@ main(int argc, char **argv)
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if (virInitialize() < 0) {
|
||||
vshError(ctl, "%s", _("Failed to initialize libvirt"));
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if (!(progname = strrchr(argv[0], '/')))
|
||||
progname = argv[0];
|
||||
else
|
||||
progname++;
|
||||
|
||||
memset(ctl, 0, sizeof(vshControl));
|
||||
ctl->imode = true; /* default is interactive mode */
|
||||
ctl->log_fd = -1; /* Initialize log file descriptor */
|
||||
|
||||
if ((defaultConn = getenv("VIRSH_DEFAULT_CONNECT_URI"))) {
|
||||
ctl->name = vshStrdup(ctl, defaultConn);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user