X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=shogi_server%2Futil.rb;h=044bd2a0654f62b6b162eb0bb7ac69b2c7945afa;hb=26a484b1c5fc49017833f509fdb5154b64174516;hp=cd477af0f573f6a3dcdd11fd41c9831a046fb80d;hpb=aca960500503dfcfe7d841c81705c1cfb755bcb0;p=shogi-server%2Fshogi-server.git diff --git a/shogi_server/util.rb b/shogi_server/util.rb index cd477af..044bd2a 100644 --- a/shogi_server/util.rb +++ b/shogi_server/util.rb @@ -20,6 +20,7 @@ require 'date' require 'fileutils' require 'pathname' +require 'thread' module ShogiServer @@ -92,4 +93,30 @@ module ShogiServer return index == 0 ? 7 : index end module_function :parse_dow + + # Mkdir in a thread-safe way. + # + class Mkdir + @@mutex = Mutex.new + + # Return true if a directory is successfully created or a directory + # exists already; false otherwise. + # + # @param path a directory name of a path to be created. For example, + # given /hoge/hoo/foo.txt, aim to create /hoge/hoo. + def Mkdir.mkdir_for(path) + unless FileTest.directory?(File.dirname(path)) + @@mutex.synchronize do + unless FileTest.directory?(File.dirname(path)) + begin + FileUtils.mkdir_p File.dirname(path) + rescue + return false + end + end + end # mutex + end + return true + end + end # class Mkdir end