[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