X-Git-Url: http://git.sourceforge.jp/view?p=shogi-server%2Fshogi-server.git;a=blobdiff_plain;f=shogi_server%2Futil.rb;h=044bd2a0654f62b6b162eb0bb7ac69b2c7945afa;hp=cd477af0f573f6a3dcdd11fd41c9831a046fb80d;hb=bcba9febcd5b77600cf449bac0dc458600431e8b;hpb=79a2333cd6a75b0b0bfebb04be8c86ba2f5a6418;ds=sidebyside 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