
On Mon, Aug 15, 2011 at 09:58:15AM +0200, Jiri Denemark wrote:
--- src/qemu/qemu_migration.c | 50 +++++++------------------------------------- 1 files changed, 8 insertions(+), 42 deletions(-)
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 1cabbe0..c29ea9e 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -42,6 +42,7 @@ #include "fdstream.h" #include "uuid.h" #include "locking/domain_lock.h" +#include "rpc/virnetsocket.h"
#define VIR_FROM_THIS VIR_FROM_QEMU @@ -1618,9 +1619,8 @@ static int doTunnelMigrate(struct qemud_driver *driver, unsigned long resource) { qemuDomainObjPrivatePtr priv = vm->privateData; - int qemu_sock = -1; - struct sockaddr_un sa_qemu; char *unixfile = NULL; + virNetSocketPtr sock = NULL; int ret = -1; qemuMigrationSpec spec;
@@ -1642,45 +1642,14 @@ static int doTunnelMigrate(struct qemud_driver *driver, goto cleanup; }
- qemu_sock = socket(AF_UNIX, SOCK_STREAM, 0); - if (qemu_sock < 0) { - virReportSystemError(errno, "%s", - _("cannot open tunnelled migration socket")); - goto cleanup; - } - memset(&sa_qemu, 0, sizeof(sa_qemu)); - sa_qemu.sun_family = AF_UNIX; - if (virStrcpy(sa_qemu.sun_path, unixfile, - sizeof(sa_qemu.sun_path)) == NULL) { - qemuReportError(VIR_ERR_INTERNAL_ERROR, - _("Unix socket '%s' too big for destination"), - unixfile); + if (virNetSocketNewListenUNIX(unixfile, 0700, + driver->user, driver->group, &sock) < 0 || + virNetSocketListen(sock, 1) < 0)
If we are sure the errors will be properly reported back in called functions, okay
goto cleanup; - } - unlink(unixfile); - if (bind(qemu_sock, (struct sockaddr *)&sa_qemu, sizeof(sa_qemu)) < 0) { - virReportSystemError(errno, - _("Cannot bind to unix socket '%s' for tunnelled migration"), - unixfile); - goto cleanup; - } - if (listen(qemu_sock, 1) < 0) { - virReportSystemError(errno, - _("Cannot listen on unix socket '%s' for tunnelled migration"), - unixfile); - goto cleanup; - } - - if (chown(unixfile, driver->user, driver->group) < 0) { - virReportSystemError(errno, - _("Cannot change unix socket '%s' owner"), - unixfile); - goto cleanup; - }
spec.destType = MIGRATION_DEST_UNIX; spec.dest.unics.file = unixfile; - spec.dest.unics.sock = qemu_sock; + spec.dest.unics.sock = virNetSocketGetFD(sock); spec.fwdType = MIGRATION_FWD_STREAM; spec.fwd.stream = st;
@@ -1688,11 +1657,8 @@ static int doTunnelMigrate(struct qemud_driver *driver, cookieoutlen, flags, resource, &spec);
cleanup: - VIR_FORCE_CLOSE(qemu_sock); - if (unixfile) { - unlink(unixfile); - VIR_FREE(unixfile); - } + virNetSocketFree(sock); + VIR_FREE(unixfile);
return ret; }
Looks lovely except that a code removing so many lines on migration code souds too good to be true <grin/> ACK, Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/