Commit 30122cfd authored by Keir Fraser's avatar Keir Fraser

xenconsoled: Fixes to domain management.

Event-channel setup: Re-bind if the connection becomes unbound (e.g.,
due to 'slow' domain suspend cancellation), even if the remote port
identifier has not changed.

Domain logging: Only open log file once (don't leak fds) and fix a
small memory leak.

Evtchn changes based on a patch by Jiri Denemark <jdenemar@redhat.com>
Signed-off-by: default avatarKeir Fraser <keir.fraser@citrix.com>
parent 027b424b
......@@ -288,6 +288,7 @@ static int create_domain_log(struct domain *dom)
namepath = s;
strcat(namepath, "/name");
data = xs_read(xs, XBT_NULL, namepath, &len);
free(namepath);
if (!data)
return -1;
if (!len) {
......@@ -548,9 +549,6 @@ static int domain_create_ring(struct domain *dom)
}
free(type);
if ((ring_ref == dom->ring_ref) && (remote_port == dom->remote_port))
goto out;
if (ring_ref != dom->ring_ref) {
if (dom->interface != NULL)
munmap(dom->interface, getpagesize());
......@@ -565,6 +563,16 @@ static int domain_create_ring(struct domain *dom)
dom->ring_ref = ring_ref;
}
/* Go no further if port has not changed and we are still bound. */
if (remote_port == dom->remote_port) {
xc_evtchn_status_t status = {
.dom = DOMID_SELF,
.port = dom->local_port };
if ((xc_evtchn_status(xc, &status) == 0) &&
(status.status == EVTCHNSTAT_interdomain))
goto out;
}
dom->local_port = -1;
dom->remote_port = -1;
if (dom->xce_handle != -1)
......@@ -601,7 +609,7 @@ static int domain_create_ring(struct domain *dom)
}
}
if (log_guest)
if (log_guest && (dom->log_fd == -1))
dom->log_fd = create_domain_log(dom);
out:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment