アカウント名:
パスワード:
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
あと、僕は馬鹿なことをするのは嫌いですよ (わざとやるとき以外は)。-- Larry Wall
推測 (スコア:3, 興味深い)
下位層のパケットが64Kバイト(ヘッダ17バイト+ペイロード65518バイト)単位で、そのペイロードの中に(12バイト*ネガティブデータ5451件+制御コード106バイト)があるという構造が見えてきます。
>85件増すごとに5件の割合で、余った2バイトの処理を忘れる
データが1件当たり12バイトなので、85件で1020バイト。おそらく、パケットをまたいだデータのバッファリング単位が1Kバイトなんでしょう。この時に何らかの原因でポインタの進め方を誤っていると想像されますが、「5件」てのがよくわかりませんねぇ。
Re:推測 (スコア:4, 興味深い)
85件増える間にコケるパターンが5つある。
それ以降も85件単位で同じパターンを繰り返す、てなとこじゃない?
どちらかというとパケット云々の問題ではなく、
内部のテーブルの初期サイズが 64KB
溢れたら 1KB 単位で拡張、でも拡張するたびに特定の件数でエラー発生、
てことのような気がする。
Re:推測 (スコア:3, 興味深い)
誤る件数が85件につき5件なので、5*12=60、処理単位は64byteなんじゃないでしょうか。
1KB拡張して64byteずつ処理するんだけれど、余りの分を考慮しようとして最後の64byteを捨ててしまうとか。
もしくは64KBを越えた場合の件数のカウントが、本当は65536byte無い(65518byte区切り)のに65536/12=5461から始まってておかしくなるとか。
Re:推測 (スコア:2, 興味深い)
通信単位と処理単位のパケットサイズが違う場合って、動的に組み立ててカーソルをずらしていくようなものなので、バグが入りやすいところではあります。
Re:推測 (スコア:2, 興味深い)
実は最後の 2byte は終了コードになっていて、
開始ヘッダ 104byte + データ部 12N byte + 終了コード 2 byte
みたいな構造になっていた。
データが 5451件 に収まる場合には 65536byte 確保し、
以後足りない場合には 64byte ずつ追加してメモリを補った。
そのサイズの計算の際に、残り 2byte 分の容量の計算を忘れて、
104 + 12N byte 確保すればいいものと勘違いしていた。
そのために、
5451 + 7 件のデータ => 65536 + 66byte 確保すべきところを 2byte 確保し忘れる。
5451 + 23件のデータ => 65536 + 258byte 確保すべきところを 2byte 確保し忘れる。
5451 + 38件のデータ => 65536 + 450byte 確保すべきところを 2byte 確保し忘れる。
5451 + 54件のデータ => 65536 + 642byte 確保すべきところを 2byte 確保し忘れる。
5451 + 70件のデータ => 65536 + 734byte 確保すべきところを 2byte 確保し忘れる。
5451 + 86件のデータ => 65536 + 926byte 確保すべきところを 2byte 確保し忘れる。
... 以後 5458 + 16k ( k = 0, 1, 2,...) ごとに同様のことが起きる。
その際に最後の(確保されていない)終了コードを読み書きする際に
segmentation fault になって落ちる、という話ではないか。
おそらく 12日のデータは丁度 5451 + 86 = 5537件のデータがあって、
見事合致してしまった。
それまでに同様の現象が 5 回起きる可能性があったのだが、
見事合致しないで来ていた、ということでしょう。
85件中5件という奇妙な数字はこの辺りから出てきたのであろうと。
# なかの人ではないのでID
Re:推測 (スコア:1)
5451 + 7 件のデータ => 65536 + 66byte 確保すべき
5451 + 23件のデータ => 65536 + 258byte 確保すべき
5451 + 39件のデータ => 65536 + 450byte 確保すべき
5451 + 55件のデータ => 65536 + 642byte 確保すべき
5451 + 71件のデータ => 65536 + 734byte 確保すべき
5451 + 87件のデータ => 65536 + 926byte 確保すべき
12日のデータは 5451 + 87 = 5538件あったのでしょう。
データが初めて 65536byte を越えるのは、5453件目(65542byte)で、
ここから数えて 86 件目となります。
それ以前の 85件の内の 5パターンにはたまたま合致しなかった、
ということだと思います。違うかな。
Re:推測 (スコア:0)
(ヒープライブラリ次第だけど)
そこにエラー検出用のチェックサムがあって書かずに読んでエラー終了とか?
Re:推測 (スコア:0)
ACで読んでるなかのひとが、そうかそういうバグかと適当に修正かましてエンバグしそうなので、
も、これです、これ、原因これでしょ、みたいなコメントは避けるべきかと。