mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
oxenstored: implement XS_RESET_WATCHES
Signed-off-by: Wei Liu <wei.liu2@citrix.com> Acked-by: David Scott <dave.scott@citrix.com>
This commit is contained in:
1 parent
e1e566ca08
commit
f8c72b5261
5 files changed
+19
-2
No files matched your search
@@ -19,7 +19,8 @@ type operation = Debug | Directory | Read | Getperms |
|
||||
Transaction_end | Introduce | Release |
|
||||
Getdomainpath | Write | Mkdir | Rm |
|
||||
Setperms | Watchevent | Error | Isintroduced |
|
||||
Resume | Set_target | Restrict | Invalid
|
||||
Resume | Set_target | Restrict | Reset_watches |
|
||||
Invalid
|
||||
|
||||
let operation_c_mapping =
|
||||
[| Debug; Directory; Read; Getperms;
|
||||
@@ -27,7 +28,7 @@ let operation_c_mapping =
|
||||
Transaction_end; Introduce; Release;
|
||||
Getdomainpath; Write; Mkdir; Rm;
|
||||
Setperms; Watchevent; Error; Isintroduced;
|
||||
Resume; Set_target; Restrict |]
|
||||
Resume; Set_target; Restrict; Reset_watches |]
|
||||
let size = Array.length operation_c_mapping
|
||||
|
||||
let array_search el a =
|
||||
@@ -68,4 +69,5 @@ let to_string ty =
|
||||
| Resume -> "RESUME"
|
||||
| Set_target -> "SET_TARGET"
|
||||
| Restrict -> "RESTRICT"
|
||||
| Reset_watches -> "RESET_WATCHES"
|
||||
| Invalid -> "INVALID"
|
||||
@@ -23,6 +23,7 @@ module Op :
|
||||
| Resume
|
||||
| Set_target
|
||||
| Restrict
|
||||
| Reset_watches
|
||||
| Invalid
|
||||
val operation_c_mapping : operation array
|
||||
val size : int
|
||||
|
||||
@@ -186,6 +186,13 @@ let del_watch con path token =
|
||||
con.nb_watches <- con.nb_watches - 1;
|
||||
apath, w
|
||||
|
||||
let del_watches con =
|
||||
Hashtbl.clear con.watches
|
||||
|
||||
let del_transactions con =
|
||||
Hashtbl.clear con.transactions;
|
||||
con.nb_watches <- 0
|
||||
|
||||
let list_watches con =
|
||||
let ll = Hashtbl.fold
|
||||
(fun _ watches acc -> List.map (fun watch -> watch.path, watch.token) watches :: acc)
|
||||
|
||||
@@ -242,6 +242,7 @@ let string_of_access_type = function
|
||||
| Xenbus.Xb.Op.Rm -> "rm "
|
||||
| Xenbus.Xb.Op.Setperms -> "setperms "
|
||||
| Xenbus.Xb.Op.Restrict -> "restrict "
|
||||
| Xenbus.Xb.Op.Reset_watches -> "reset watches"
|
||||
| Xenbus.Xb.Op.Set_target -> "settarget"
|
||||
|
||||
| Xenbus.Xb.Op.Error -> "error "
|
||||
|
||||
@@ -272,6 +272,11 @@ let do_restrict con t domains cons data =
|
||||
in
|
||||
Connection.restrict con domid
|
||||
|
||||
(* only in xen >= 4.2 *)
|
||||
let do_reset_watches con t domains cons data =
|
||||
Connection.del_watches con;
|
||||
Connection.del_transactions con
|
||||
|
||||
(* only in >= xen3.3 *)
|
||||
(* we ensure backward compatibility with restrict by counting the number of argument of set_target ... *)
|
||||
(* This is not very elegant, but it is safe as 'restrict' only restricts permission of dom0 connections *)
|
||||
@@ -324,6 +329,7 @@ let function_of_type ty =
|
||||
| Xenbus.Xb.Op.Resume -> reply_ack do_resume
|
||||
| Xenbus.Xb.Op.Set_target -> reply_ack do_set_target
|
||||
| Xenbus.Xb.Op.Restrict -> reply_ack do_restrict
|
||||
| Xenbus.Xb.Op.Reset_watches -> reply_ack do_reset_watches
|
||||
| Xenbus.Xb.Op.Invalid -> reply_ack do_error
|
||||
| _ -> reply_ack do_error
|
||||
|
||||
|
||||