[mew-dist 25179] Re: race? condition in +queue ?

Tatsuya Kinoshita tats at example.com
2004年 8月 23日 (月) 00:22:04 JST


On August 19, 2004, [mew-dist 25152],
shigeya (at omnisci.co.jp) wrote:

> たとえば、+queue/1 を送信しようとしているときに、
> 1 が 1.wrk に rename され、送信中がはじまりますが、
> この送信が行われている最中に draft をつくって即座にC-c C-mする
> と、+queue/1 にあたらしいメッセージが(笑)
> 
> さらに、送信失敗したときに 1.wrk を 1 に rename しようとしたりすると、
> なかなか楽しいのではないかと。

mew-queue-enqueue関数内で1.wrkからrenameする際に、1があれば2を使う
というふうな確認はあります。それでも1.wrkから既存の1へ上書きしてし
まっていたのなら、

  * foreground(Draftからの+queueメール作成)で1がないことを確認
  * background(+queueメール送信失敗)で1がないことを確認
  * foregroundで1へ書き込み
  * backgroundで1へ書き込み (foregroundの1が上書きされる)

というふうに処理が進んでしまったのでしょう。

とすると[mew-dist 25162]の修正では、解決には至っていないように思え
ます。

foregroundとbackgroundとでmew-queue-enqueue関数が並行して動かない
ように、たとえばロックをかけるような処理が必要になりそうな気がする
のですが、どうでしょうか。

-- 
木下達也



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