[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 メーリングリストの案内