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(a)veillard.com | Rpmfind RPM search engine
http://rpmfind.net/
http://veillard.com/ | virtualization library
http://libvirt.org/