diff --git a/ChangeLog b/ChangeLog index 51153341be..3aa8676ece 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Sep 10 13:46:05 CEST 2007 Daniel Veillard + + * src/xend_internal.c: applied patch from Hugh Brock to allow + CD Rom device reload by reusing virDomainAttachDevice() with + a new definition + Mon Sep 10 11:35:06 CEST 2007 Daniel Veillard * include/libvirt/libvirt.h include/libvirt/libvirt.h.in diff --git a/src/xend_internal.c b/src/xend_internal.c index 0bd42a700f..64557fcb75 100644 --- a/src/xend_internal.c +++ b/src/xend_internal.c @@ -3087,6 +3087,7 @@ xenDaemonAttachDevice(virDomainPtr domain, char *xml) char *sexpr, *conf, *str; int hvm = 0, ret; xenUnifiedPrivatePtr priv; + char class[8], ref[80]; if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) { virXendError((domain ? domain->conn : NULL), VIR_ERR_INVALID_ARG, @@ -3116,8 +3117,16 @@ xenDaemonAttachDevice(virDomainPtr domain, char *xml) *(conf + strlen(conf) -1) = 0; /* suppress final ) */ } else conf = sexpr; - ret = xend_op(domain->conn, domain->name, "op", "device_create", - "config", conf, NULL); + if (virDomainXMLDevID(domain, xml, class, ref)) { + /* device doesn't exist, define it */ + ret = xend_op(domain->conn, domain->name, "op", "device_create", + "config", conf, NULL); + } + else { + /* device exists, attempt to modify it */ + ret = xend_op(domain->conn, domain->name, "op", "device_configure", + "config", conf, "dev", ref, NULL); + } free(sexpr); return ret; }