diff options
Diffstat (limited to 'tools/ocaml/xenstored/domain.ml')
-rw-r--r-- | tools/ocaml/xenstored/domain.ml | 28 |
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 |