All new accounts created on Gitlab now require administrator approval. If you invite any collaborators, please let Flux staff know so they can approve the accounts.

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