aboutsummaryrefslogtreecommitdiffstats
path: root/tools/ocaml/xenstored/domain.ml
diff options
context:
space:
mode:
Diffstat (limited to 'tools/ocaml/xenstored/domain.ml')
-rw-r--r--tools/ocaml/xenstored/domain.ml28
1 files changed, 20 insertions, 8 deletions
diff --git a/tools/ocaml/xenstored/domain.ml b/tools/ocaml/xenstored/domain.ml
index c17f567a47..85ab282c54 100644
--- a/tools/ocaml/xenstored/domain.ml
+++ b/tools/ocaml/xenstored/domain.ml
@@ -17,6 +17,7 @@
open Printf
let debug fmt = Logging.debug "domain" fmt
+let warn fmt = Logging.warn "domain" fmt
type t =
{
@@ -25,7 +26,7 @@ type t =
remote_port: int;
interface: Xenmmap.mmap_interface;
eventchn: Event.t;
- mutable port: int;
+ mutable port: Xeneventchn.t option;
}
let get_path dom = "/local/domain/" ^ (sprintf "%u" dom.id)
@@ -34,19 +35,30 @@ let get_interface d = d.interface
let get_mfn d = d.mfn
let get_remote_port d = d.remote_port
+let string_of_port = function
+| None -> "None"
+| Some x -> string_of_int (Xeneventchn.to_int x)
+
let dump d chan =
- fprintf chan "dom,%d,%nd,%d\n" d.id d.mfn d.port
+ fprintf chan "dom,%d,%nd,%s\n" d.id d.mfn (string_of_port d.port)
-let notify dom = Event.notify dom.eventchn dom.port; ()
+let notify dom = match dom.port with
+| None ->
+ warn "domain %d: attempt to notify on unknown port" dom.id
+| Some port ->
+ Event.notify dom.eventchn port
let bind_interdomain dom =
- dom.port <- Event.bind_interdomain dom.eventchn dom.id dom.remote_port;
- debug "domain %d bound port %d" dom.id dom.port
+ dom.port <- Some (Event.bind_interdomain dom.eventchn dom.id dom.remote_port);
+ debug "domain %d bound port %s" dom.id (string_of_port dom.port)
let close dom =
- debug "domain %d unbound port %d" dom.id dom.port;
- Event.unbind dom.eventchn dom.port;
+ debug "domain %d unbound port %s" dom.id (string_of_port dom.port);
+ begin match dom.port with
+ | None -> ()
+ | Some port -> Event.unbind dom.eventchn port
+ end;
Xenmmap.unmap dom.interface;
()
@@ -56,7 +68,7 @@ let make id mfn remote_port interface eventchn = {
remote_port = remote_port;
interface = interface;
eventchn = eventchn;
- port = -1
+ port = None
}
let is_dom0 d = d.id = 0