[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[mhc:02147] Re: palm2mhc should fsync before clear dirty flag.



  Message-Id: <20050706201518Z.nom@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
  Date:       Wed, 06 Jul 2005 20:15:18 +0900
  From:       Yoshinari Nomura <nom@xxxxxxxxxxxxx>
  Subject:    [mhc:02145] Re: palm2mhc should fsync before clear dirty..

  | 乃村です.
  | 
  | >   | この変更ですが,system 使うのもナンなので,
  | >   | Ruby18  以降なら fsync するというコードに
  | >   | していただけると嬉しいです.
  | > 
  | > こんな感じでしょうか:
  | >     f .fsync if RUBY_VERSION >= '1.8'
  | > こんなのでもいいかなとおもいました:
  | >     f .fsync if f .respond_to?("fsync")
  | 
  | 後ろの方がよさげですね.commit しておきました.

時間があいてしまったのですが
パッチを添付しました。
fsyncはFileのメソッドなのでpalm2mhcのtoplevelからは呼べないです。

パッチの内容は
  open で書き込みオープンしているところに fsync 呼び出しを追加
  mkdir の後でディレクトリをfsync
  fsyncがないときには palm2mhc の最後で system("sync")×2
です。

--
KOIE Hidetaka <hide@xxxxxxxx>
--- palm2mhc.in	6 Jul 2005 11:14:17 -0000	1.5
+++ palm2mhc.in	14 Jul 2005 10:36:56 -0000
@@ -133,13 +133,9 @@ if $flag_noharm
 else
   if !$flag_interactive or yes_no("Do you clear dirty flag of the palm ")
     # commit
-    if f .respond_to?("fsync")
-      f .fsync 
-      sleep 1
-      f .fsync
-      sleep 1
-      f .fsync
-      sleep 1
+    if ! File .method_defined?("fsync")
+      system("sync")
+      system("sync")
     end
     # done.
     pdb .reset_sync_flags  ## remove all dirty flag in palm.


--- ruby-ext/lib/mhc-schedule.rb.orig	Thu Jul 14 19:53:37 2005
+++ ruby-ext/lib/mhc-schedule.rb.koie	Thu Jul 14 19:54:43 2005
@@ -1089,6 +1089,7 @@ class File
       else
 	f = File .open(obj + '/' + MTIME_FILE, "w")
 	f .print 'x' # FreeBSD requires this.
+	f .fsync if f .respond_to?("fsync")
 	f .close
       end
     end
@@ -1169,7 +1170,10 @@ class MhcScheduleDB
       end
 
       contents = sch .dump
-      (File .open(new_path, "w") << contents) .close
+      f = File .open(new_path, "w")
+      f << contents
+      f .fsync if f .respond_to?("fsync")
+      f .close
       print "#{old_path} -> #{new_path}\n" if $DEBUG
 
       File .utime2(now, now, new_slot)
@@ -1293,7 +1297,7 @@ class MhcScheduleDB
     return true if File .directory?(dir)
     parent = File .dirname(dir)
     if makedir_or_higher(parent)
-      Dir .mkdir(dir)
+      File .open(dir, "r") .fsync .close if File .method_defined?("fsync")
       return true
     end
     return false
@@ -1433,6 +1437,7 @@ class MhcLog
   def add_entry(entry)
     file = File .open(@filename, "a+")
     file .print "#{entry}\n"
+    file .fsync if f .respond_to?("fsync")
     file .close
   end