You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whimsical.apache.org by se...@apache.org on 2018/07/03 17:04:20 UTC

[whimsy] branch master updated: Encapsulate file open as well

This is an automated email from the ASF dual-hosted git repository.

sebb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git


The following commit(s) were added to refs/heads/master by this push:
     new 21a1348  Encapsulate file open as well
21a1348 is described below

commit 21a1348f7d0709999906bf0b62d9707e0e91b15e
Author: Sebb <se...@apache.org>
AuthorDate: Tue Jul 3 18:04:18 2018 +0100

    Encapsulate file open as well
---
 lib/whimsy/lockfile.rb | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/lib/whimsy/lockfile.rb b/lib/whimsy/lockfile.rb
index b8497fe..57d5515 100644
--- a/lib/whimsy/lockfile.rb
+++ b/lib/whimsy/lockfile.rb
@@ -19,7 +19,7 @@ module LockFile
     return verbose ?  [err==nil, err] :  err==nil
   end
 
-  # lock a file and ensure it gets unlocked
+  # lock an open file and ensure it gets unlocked
   def self.flock(file, mode)
     ok = file.flock(mode)
     if ok
@@ -32,6 +32,14 @@ module LockFile
     ok
   end
 
+  # open a file and lock it
+  def self.lockfile(filename, mode, lockmode)
+    open(filename, mode) do |f|
+      self.flock(f, lockmode) { |g|
+        yield g
+      }
+    end
+  end
 end
 
 
@@ -47,6 +55,14 @@ if __FILE__ == $0
     ret = LockFile.create_ex(name) {|f| f << text}
   when 'createShow'
     ret = LockFile.create_ex(name, true) {|f| f << text}
+  when 'opena'
+    puts "#{Time.now} Wait lock"
+    ret = LockFile.lockfile(name, 'a', File::LOCK_EX) do |f|
+      puts "#{Time.now} Got lock"
+      f << text
+      puts "#{Time.now} Sleep"
+      sleep(5)
+    end
   when 'locka'
     open(name,'a') do |f|
       puts "#{Time.now} Wait lock"