chiark / gitweb /
apitest: Move OtterPaused from wdt-simple
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 2 Apr 2021 14:58:30 +0000 (15:58 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 2 Apr 2021 14:58:30 +0000 (15:58 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
apitest/apitest.rs
wdriver/wdt-simple.rs

index 3c03dd432818afac5aede8100c25d6c9caa42344..58305f72a5ae10a9a689da09730db14df68a8402 100644 (file)
@@ -68,7 +68,7 @@ pub struct Opts {
 pub struct SetupCore {
   pub ds: DirSubst,
   pub mgmt_conn: MgmtChannel,
-  pub server_child: Child,
+  server_child: Child,
   pub wanted_tests: TrackWantedTests,
 }
 
@@ -763,6 +763,34 @@ impl DirSubst {
   }
 }
 
+// -------------------- concurrency management --------------------
+
+pub struct OtterPaused(nix::unistd::Pid);
+
+impl SetupCore {
+  #[throws(AE)]
+  pub fn pause_otter(&self) -> OtterPaused {
+    let pid = nix::unistd::Pid::from_raw(
+      self.server_child.id() as nix::libc::pid_t
+    );
+    nix::sys::signal::kill(pid, nix::sys::signal::SIGSTOP)?;
+    OtterPaused(pid)
+  }
+}
+
+impl OtterPaused {
+  #[throws(AE)]
+  pub fn resume(self) {
+    nix::sys::signal::kill(self.0, nix::sys::signal::SIGCONT)?;
+  }
+}
+
+impl Drop for OtterPaused {
+  fn drop(&mut self) {
+    debug!("note, otter server pid={} was still paused", self.0);
+  }
+}
+
 // -------------------- utilities --------------------
 
 #[ext(pub)]
index 4fc177691d3618a4448b36113fc1bba0a43f5482..35e37c5acf6a4c8bad2677336d47e20c9c63c627 100644 (file)
@@ -204,8 +204,7 @@ impl Ctx {
 
     dbg!(&sides);
 
-    let pid = nix::unistd::Pid::from_raw(su.server_child.id() as nix::libc::pid_t);
-    nix::sys::signal::kill(pid, nix::sys::signal::SIGSTOP)?;
+    let paused = su.pause_otter()?;
 
     for side in &sides {
       let w = su.w(side.window)?;
@@ -223,7 +222,7 @@ impl Ctx {
         .context("conflicting drag")?;
     }
 
-    nix::sys::signal::kill(pid, nix::sys::signal::SIGCONT)?;
+    paused.resume()?;
 
     #[derive(Debug)]
     struct Got<'s> {