Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP3:GA
libvirt.4037
libxl-release-mig-port.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File libxl-release-mig-port.patch of Package libvirt.4037
libxl: fix leaking of allocated migration ports Although the migration port is immediately released in the finish phase of migration, it was never set in the domain private object when allocated in the prepare phase. So libxlDomainMigrationFinish() always released a 0-initialized migrationPort, leaking any allocated port. After enough migrations to exhaust the migration port pool, migration would fail with error: internal error: Unable to find an unused port in range 'migration' (49152-49216) Fix it by setting libxlDomainObjPrivate->migrationPort to the port allocated in the prepare phase. While at it, also fix leaking an allocated port if the prepare phase fails. Index: libvirt-2.0.0/src/libxl/libxl_migration.c =================================================================== --- libvirt-2.0.0.orig/src/libxl/libxl_migration.c +++ libvirt-2.0.0/src/libxl/libxl_migration.c @@ -513,6 +513,7 @@ libxlDomainMigrationPrepare(virConnectPt libxlDriverPrivatePtr driver = dconn->privateData; libxlMigrationCookiePtr mig = NULL; virDomainObjPtr vm = NULL; + libxlDomainObjPrivatePtr priv; char *hostname = NULL; unsigned short port; char portstr[100]; @@ -541,6 +542,7 @@ libxlDomainMigrationPrepare(virConnectPt NULL))) goto error; *def = NULL; + priv = vm->privateData; /* Create socket connection to receive migration data */ if (!uri_in) { @@ -557,6 +559,7 @@ libxlDomainMigrationPrepare(virConnectPt if (virPortAllocatorAcquire(driver->migrationPorts, &port) < 0) goto error; + priv->migrationPort = port; if (virAsprintf(uri_out, "tcp://%s:%d", hostname, port) < 0) goto error; } else { @@ -591,6 +594,7 @@ libxlDomainMigrationPrepare(virConnectPt if (virPortAllocatorAcquire(driver->migrationPorts, &port) < 0) goto error; + priv->migrationPort = port; } else { port = uri->port; } @@ -653,6 +657,8 @@ libxlDomainMigrationPrepare(virConnectPt } VIR_FREE(socks); virObjectUnref(args); + virPortAllocatorRelease(driver->migrationPorts, priv->migrationPort); + priv->migrationPort = 0; /* Remove virDomainObj from domain list */ if (vm) {
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor