249日って・・・

NTTひかり電話126万台、249日使用で発着不能に – 社会
249日ってなんだろうと考えて、秒に直して100倍してみたら
16進数で 80000000 、つまり、32ビットの符号付き整数の最大値よりちょっと大きい値になった
これって、Linuxの内部で使用されていいるjiffiesの値だろう。
(BSDでも100分の1秒カウンターって使われているのかな??)
jiffiesは約100分の1秒ごとに1増えていくカウンターで、
内部時計なんかを更新するために使われている。
普通にjiffiesを使うと、32bit符号なし整数になるはずなんだが、
それを間違って符号付きで宣言して使ったか、
それとも平均でも取ろうとして足し算しちゃったか、
してオーバーフローさせたんだろうな
符号なしでも、499日で一周するから、多分同じことになったんだけど・・・
今のリナックスでは、64ビット符号なし整数のjiffies64と
同じアドレスを指すというトリッキーなやり方で、64ビット拡張が行われている。
64ビットの値を使ってれば、こんなこと無かったのに・・・
プログラマとしてはレベルが低い。
こういう時間がたたないと出てこないバグって、テストでは見つからないので
一番気をつけないといけないところなんだよね。
この手のカウンターを使うときは一周することは十分承知して使わないといけない。
と、自戒も込めて書いておこう。

カテゴリー: しすてむ パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です