(toppers-users 1723) TINET: echos.c
Motoya Kurotsu
kurotsu @ allied-telesis.co.jp
2004年 11月 2日 (火) 13:29:04 JST
こんにちは、少し前から、TINET のコードを読んでいます。
echos.c の 234行あたりに、
/*
* 一度バッファにデータを移す。直接送信バッファに
* 書き込もうとしても、デッドロックすることがある。
*/
memcpy(buffer, rbuf, rblen);
とありますが、 デッドロックはどのような条件下で起きるのか、
教えてください。 添付のパッチのように変更して、実験してみましたが、
デッドロック状態にはなりません。たぶん条件が緩いのだとおもいます。
デッドロックの再現条件がありましたら、教えてください。
また、もしこのコメント通りならば、268行目は、
memcpy(sbuf, rbuf + soff, slen);
ではなく、
memcpy(sbuf, buffer + soff, slen);
ではないのでしょうか。
diff -Nur 1.2.1/echos/echos.c 1.2.1.v1/echos/echos.c
--- 1.2.1/echos/echos.c 2004-07-21 08:25:36.000000000 +0900
+++ 1.2.1.v1/echos/echos.c 2004-11-02 13:07:20.000000000 +0900
@@ -235,13 +235,6 @@
* 一度バッファにデータを移す。直接送信バッファに
* 書き込もうとしても、デッドロックすることがある。
*/
- memcpy(buffer, rbuf, rblen);
-
- if ((error = tcp_rel_buf((INT)exinf, rlen)) < 0) {
- syslog(LOG_NOTICE, "[TCP ECHO SRV (NBLK) REL] error: %s",
- itron_strerror(error));
- break;
- }
soff = 0;
while (rlen > 0) {
@@ -277,6 +270,12 @@
rlen -= slen;
soff += slen;
}
+
+ if ((error = tcp_rel_buf((INT)exinf, rblen)) < 0) {
+ syslog(LOG_NOTICE, "[TCP ECHO SRV (NBLK) REL] error: %s",
+ itron_strerror(error));
+ break;
+ }
}
err_fin:
--
黒津基弥
システム研究開発部
株式会社アライドテレシス開発センター