[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:43558] stoneが切れる(gccの問題?)
- From: Sugano Yoshihisa (E) <koshian@xxxxxxxxxxx>
- Subject: [debian-users:43558] stoneが切れる(gccの問題?)
- Date: Sun, 15 May 2005 02:57:30 +0900
- List-help: <mailto:debian-users-ctl@debian.or.jp?body=help>
- List-id: debian-users.debian.or.jp
- List-owner: <mailto:debian-users-admin@debian.or.jp>
- List-post: <mailto:debian-users@debian.or.jp>
- List-software: fml [fml 4.0.3 release (20011202/4.0.3)]
- List-unsubscribe: <mailto:debian-users-ctl@debian.or.jp?body=unsubscribe>
- X-dispatcher: imput version 20050308(IM148)
- X-ml-info: If you have a question, send e-mail with the body "help" (without quotes) to the address debian-users-ctl@debian.or.jp; help=<mailto:debian-users-ctl@debian.or.jp?body=help>
- X-ml-name: debian-users
- X-mlserver: fml [fml 4.0.3 release (20011202/4.0.3)]; post only (only members can post)
- X-original-to: debian-users@debian.or.jp
- X-spam-level: *
- X-spam-status: No, hits=1.5 required=10.0 tests=ISO2022JP_BODY,ISO2022JP_CHARSET,PATCH_UNIFIED_DIFF, RCVD_IN_ORBS,RCVD_IN_OSIRUSOFT_COM,SIGNATURE_SHORT_DENSE, SPAM_PHRASE_00_01,TO_LOCALPART_EQ_REAL,USER_AGENT, X_OSIRU_OPEN_RELAY version=2.44
- Message-id: <877ji1snb0.wl@xxxxxxxxxxxxxxxxx>
- X-mail-count: 43558
- User-agent: Wanderlust/2.10.1 (Watching The Wheels) SEMI/1.14.6 (Maruoka) FLIM/1.14.6 (Marutamachi) APEL/10.6 Emacs/21.3 (i686-pc-linux-gnu) MULE/5.0 (SAKAKI)
すがのです。
BTSに投げようかと思ってたのですが、ちょっと迷ってしまったので相談させ
てください。
Debianパッケージのstone 2.2-1をsidで利用しようとしてるのですが、繋いで
すぐコネクションが切れるのです。
$ stone localhost:23 2023
$ telnet localhost 2023
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Linux (yuki) (ttyp0)
yuki login: Connection closed by foreign host.
と、ログインネームを入れようとキーを押した途端切断されます。
それで原因をちょっと追っかけてみたのですが、どうもよくわからない現象に
ぶちあたってしまいました。
デバッガの使い方を学習する機会が無かったもので、デバッグプリントで確認
したのですが、stone.cの2820行目のclockという変数が問題でした。
if (idle && pair->timeout > 0
&& time(&clock), clock - pair->clock > pair->timeout) {
という条件式なのですが、この下で
message(LOG_NOTICE,"Clock: %d",clock);
というデバッグプリントを埋め込んで見ました。
するとこのようなメッセージがstoneのログに記録されました。
May 15 00:31:08 Clock: -1073745496
この変数は time_t で宣言されてるので、マイナスになるということは無いと
思いますし、順次演算子でtime(&clock)が実行されてる(はず)なのでこんな値
になるとは思えないのですが……。
ともかくおかしいのはここだということで、以下のようなパッチを適用してみ
ました。
diff -ur stone-2.2.origsrc/stone.c stone-2.2/stone.c
--- stone-2.2.origsrc/stone.c 2005-05-15 01:42:03.405957628 +0900
+++ stone-2.2/stone.c 2005-05-15 01:42:30.041216152 +0900
@@ -2816,8 +2816,9 @@
ASYNC(asyncReadWrite,pair);
}
}
+ time(&clock);
if (idle && pair->timeout > 0
- && time(&clock), clock - pair->clock > pair->timeout) {
+ && clock - pair->clock > pair->timeout) {
if (pair->count > 0 || Debug > 2) {
message(LOG_NOTICE,"TCP %d: idle time exceeds",sd);
message_pair(pair);
これでちゃんとプラスの値がclockに入り、問題なく動きました。
原因がgccの順次演算子の処理にあるのか、それともlinuxかglibcの時間関数
の扱いに問題があるのか、はたまた順次演算子のこのような使い方がそもそも
未定義なのか、私の知識ではこれ以上はわかりません。
どちらにBTSしたものでしょうか?
もしこの原因がお分かりになる方がいらっしゃいましたら、適切なところにバ
グ報告してくださるとありがたく思います。
--
狐志庵
Sugano Yoshihisa(E) <mailto:koshian@xxxxxxxxxxx>
Website: <http://www.misao.gr.jp/~koshian/>
PGP fingerprint [6367 2352 3995 214E B954 A1FE 33D9 C918 606F 7C15]