[mew-dist 27896] write-region-inhibit-fsync

KOIE Hidetaka ( 鯉江英隆 ) hide at example.com
2007年 11月 22日 (木) 15:03:33 JST


最近マシンを新しくして
ちゃんとディスクアクセスランプが点滅するようになったのですが
POP INCするときに激しく点滅するのが気になってしかたありません。
#LEDの輝度が高すぎるのも問題なのですが.

emacsを調べてみたら変数write-region-inhibit-fsyncをつかうと
fsync()を抑制できるようなので、パッチを書きました。
(setq mew-pop-async-write t) で有効になります。

ノートPCでバッテリ駆動しているときなど
ディスクアクセスがおとなしくなって省エネ効果があるとおもいます。

まったくディスクに書き込まずに POP QUIT してしまうと
不慮の電源断でサーバとの間で不整合がおこるかもしれないので
最後に気休め程度にunix-sync()を入れています。

Index: mew-pop.el
===================================================================
RCS file: /cvsmew/mew/mew-pop.el,v
retrieving revision 1.214
diff -u -F^( -r1.214 mew-pop.el
--- mew-pop.el	25 Jul 2007 06:06:59 -0000	1.214
+++ mew-pop.el	22 Nov 2007 05:52:28 -0000
@@ -11,6 +11,7 @@ (defvar mew-pop-msgid-file ".mew-msgid")
 (defvar mew-pop-folder-alist (list (mew-folder-func mew-pop-inbox-folder)))
 (defun mew-pop-folder-alist ()
   mew-pop-folder-alist)
+(defvar mew-pop-async-write nil)
 
 ;; It is impossible to implement mew-pop-skip-uidl since
 ;; messages cannot be gained access by UID.
@@ -449,7 +450,8 @@ (defun mew-pop-command-dele (pro pnm)
       (condition-case nil
 	  (mew-frwlet 
 	   mew-cs-dummy mew-cs-text-for-write
-	   (write-region (point-min) (point-max) file nil 'no-msg))
+           (let ((write-region-inhibit-fsync mew-pop-async-write))
+             (write-region (point-min) (point-max) file nil 'no-msg)))
 	(error
 	 (mew-pop-set-status pnm "quit")
 	 (mew-pop-command-quit pro pnm)
@@ -481,6 +483,9 @@ (defun mew-pop-command-dele (pro pnm)
 	(mew-pop-command-retr pro pnm)))))
 
 (defun mew-pop-command-quit (pro pnm)
+  (when (and mew-pop-async-write
+             (functionp 'unix-sync))
+    (unix-sync))
   (mew-pop-set-done pnm t)
   (mew-pop-process-send-string pro "QUIT"))
 

--
鯉江英隆 <hide at example.com>



Mew-dist メーリングリストの案内