From 2d664d44c257f665e705f3cbd33f31547f84fcaa Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Sun, 22 Apr 2012 14:18:15 +1000 Subject: [PATCH] suspend.py: we need to updated the watcher when we get a new file to watch. Signed-off-by: NeilBrown --- suspend.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/suspend.py b/suspend.py index d8b236e..3ff096d 100644 --- a/suspend.py +++ b/suspend.py @@ -58,22 +58,33 @@ class monitor: pass def change(self, watched): - if os.fstat(self.f.fileno()).st_size == 0: - if self.suspended and os.stat('/var/run/suspend/watching').st_size == 0: + if self.suspended: + # resume has happened if watching-next has been renamed. + if (os.fstat(self.f.fileno()).st_ino == + os.stat('/var/run/suspend/watching').st_ino): + global lock_watcher self.suspended = False + self.watch.cancel() + self.watch = lock_watcher.watch("watching", self.change) if self.resume: self.resume() - return - if not self.suspended and (not self.suspend or self.suspend()): - # ready for suspend - self.release() + else: + return + # not suspended, but maybe it's time + if os.fstat(self.f.fileno()).st_size > 0: + if not self.suspend or self.suspend(): + # ready for suspend + self.release() def release(self): # ready for suspend + global lock_watcher old = self.f self.f = open('/var/run/suspend/watching-next', 'r') self.getlock() self.suspended = True + self.watch.cancel() + self.watch = lock_watcher.watch("watching-next", self.change) fcntl.flock(old, fcntl.LOCK_UN) old.close() -- 2.39.5