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

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



Palmの母艦になっているFreeBSDが不安定で
palm2mhc直後にpanicしてしまったのですが
palmのdirty bitはクリアされているのに
mhcのファイルが残っていないという状態になってしまいました。

class MhcScheduleDBのmethod add_schで
fsyncしていないのが問題なのだとおもいます。
たぶん log を追記するところも fsync が必要だとおもいます。

ですがfsyncはRuby18以降にしかないので
palm2mhcの終了直前に sync x 3するコードを入れてみました。
syncだと書き込みが成功するのを待たないので気休めでしかないのですが。

Index: palm2mhc.in
===================================================================
RCS file: /cvsroot/mhc/palm2mhc.in,v
retrieving revision 1.4
diff -p -u -r1.4 palm2mhc.in
--- palm2mhc.in	9 Feb 2001 09:37:06 -0000	1.4
+++ palm2mhc.in	4 Jul 2005 05:18:08 -0000
@@ -75,7 +75,7 @@ while ARGV .length > 0
   ARGV .shift
 end
 
-if !File .exist?($flag_device)
+if $flag_device != "net:" && !File .exist?($flag_device)
   STDERR .print "Can not open #{$flag_device}.\n"
   exit 1
 end
@@ -132,6 +132,14 @@ if $flag_noharm
   ## do nothing
 else
   if !$flag_interactive or yes_no("Do you clear dirty flag of the palm ")
+    # commit
+    system("sync")
+    sleep 1
+    system("sync")
+    sleep 1
+    system("sync")
+    sleep 1
+    # done.
     pdb .reset_sync_flags  ## remove all dirty flag in palm.
     print "Dirty flag cleared.\n"
   else

--
KOIE Hidetaka <hide@xxxxxxxx>