[Mew-dist 11279] IM queue frash 時に connection error した場合の処理について

Ninomiya Hideyuki nin at example.com
1999年 11月 12日 (金) 18:53:46 JST


こんにちは	二宮 @ お四国 です。
いつもお世話になっております。
IM の queue frash 時に connection error した場合の処理に問題有りだなー
と思っていたのですが、自力で何とかやってみようと思いコードを追っかけたり
してたのですが、自分の手に負えそうが無いので、ご教授頂けたらと思います。

以下の状態の queue で
nin at example.com$ imput --queuestatus=on
Message queued in /usr/home/nin/.im/queue/1
    Message-ID: <19991112132302K.nin at example.com>
    Date: Fri, 12 Nov 1999 13:23:02 +0900
    Subject: test
    Recipients:
        <nin at example.com>

わざと接続できない状態にしといて

nin at example.com$ imput --verbose --debug --processqueue
imput: setting debug level all=1
imput: processing /usr/home/nin/.im/queue/1.wrk ...
<snip>
imput:DEBUG: ENV>SSV:smtp.shikoku.ne.jp
imput:DEBUG: ENV>NSV:news.shikoku.ne.jp
imput:DEBUG: ENV>R:<nin at example.com>
imput:DEBUG: reading message
imput:DEBUG: sending message
imput: ERROR: connection error

すると、queue dir の状態が

nin at example.com$ ls -l
total 1
-rw-------  1 nin  key-com  715 Nov 12 13:23 1.wrk

となっている為に、queue frash して再送信する事が出来ません。
$ mv ~/.im/queue/1.wrk ~/.im/queue/1 とかすれば再送信できます。

IM/TcpTransaction.pm で
sub connect_server ($$$){
....
    $SIG{'ALRM'} = \&alarm_func;
....
    alrm(dns_timeout())....
}

sub alarm_func {
    im_die("connection error\n");
}

こんなんなってるので、ここで強制終了してるんだと思うのですが、
queue/1 -> queue/1.wrk
とリネームされたままになっちゃう事が原因だという事までは何とか解りました。

IM/TcpTransaction.pm の connect_server で connection error になった場合
でも、そこでいきなり im_die するのでなく -1 を返して、connect_server を
呼び出した側で im_die するのが一番エレガントではないかと思うのですが、
その場合は修正場所が多岐に渡り、自分の手には負えません。

imput の process_queue の方で対処するのが、修正箇所が小さくて済むという
事では良いと思います。しかし、コードとにらめっこしてみたのですが、良いア
イデアが浮かびません。そもそも、queue/1 -> queue/1.wrk にリネームする事
が必要なのかもちょっと疑問に思うのですが、その辺いかがなもんなのでしょう
か ?

どうか、解決方法を御指導下さい。よろしくお願い致します。
---
                                         二宮 秀幸@愛媛 鬼北 広見町
PGP-Fingerprint: 6C59 EC08 5B23 6490 44D0  7CD3 DA40 219F 7114 8553
                                           mailto:nin at example.com
                           http://user.shikoku.ne.jp/nin/index.html



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