NTTひかり電話126万台、249日使用で発着不能に – 社会
249日ってなんだろうと考えて、秒に直して100倍してみたら
16進数で 80000000 、つまり、32ビットの符号付き整数の最大値よりちょっと大きい値になった
これって、Linuxの内部で使用されていいるjiffiesの値だろう。
(BSDでも100分の1秒カウンターって使われているのかな??)
jiffiesは約100分の1秒ごとに1増えていくカウンターで、
内部時計なんかを更新するために使われている。
普通にjiffiesを使うと、32bit符号なし整数になるはずなんだが、
それを間違って符号付きで宣言して使ったか、
それとも平均でも取ろうとして足し算しちゃったか、
してオーバーフローさせたんだろうな
符号なしでも、499日で一周するから、多分同じことになったんだけど・・・
今のリナックスでは、64ビット符号なし整数のjiffies64と
同じアドレスを指すというトリッキーなやり方で、64ビット拡張が行われている。
64ビットの値を使ってれば、こんなこと無かったのに・・・
プログラマとしてはレベルが低い。
こういう時間がたたないと出てこないバグって、テストでは見つからないので
一番気をつけないといけないところなんだよね。
この手のカウンターを使うときは一周することは十分承知して使わないといけない。
と、自戒も込めて書いておこう。
-
最近の投稿
最近のコメント
- DynabookでWindows7 SP1の更新が見えない に umeko より
- DynabookでWindows7 SP1の更新が見えない に mark より
- DynabookでWindows7 SP1の更新が見えない に 篠 敏生 より
- カーネル/VM Advent Calendar : ATND に たけおか より
- 基礎から学ぶ 組み込みAndroid に mark より
アーカイブ
- 2017年1月
- 2014年9月
- 2013年9月
- 2013年8月
- 2013年2月
- 2012年10月
- 2012年9月
- 2012年7月
- 2012年6月
- 2012年5月
- 2012年2月
- 2011年8月
- 2011年5月
- 2011年4月
- 2011年3月
- 2011年1月
- 2010年12月
- 2010年10月
- 2010年7月
- 2010年5月
- 2010年4月
- 2010年3月
- 2010年2月
- 2010年1月
- 2009年11月
- 2009年10月
- 2009年9月
- 2009年8月
- 2009年7月
- 2009年6月
- 2009年4月
- 2009年3月
- 2009年2月
- 2009年1月
- 2008年12月
- 2008年11月
- 2008年10月
- 2008年8月
- 2008年7月
- 2008年6月
- 2008年5月
- 2008年4月
- 2008年3月
- 2008年2月
- 2008年1月
- 2007年12月
- 2007年11月
- 2007年10月
- 2007年9月
- 2007年8月
- 2007年7月
- 2007年6月
- 2007年5月
- 2007年4月
- 2007年3月
- 2007年2月
- 2007年1月
- 2006年12月
- 2006年11月
- 2006年10月
- 2006年9月
- 2006年8月
- 2006年7月
- 2006年6月
- 2006年5月
- 2006年4月
- 2006年3月
- 2006年2月
- 2006年1月
- 2005年12月
- 2005年11月
- 2005年10月
- 2005年9月
- 2005年8月
- 2005年7月
- 2005年6月
- 2005年5月
- 2005年4月
- 2005年3月
- 2005年2月
- 2005年1月
- 2004年12月
- 2004年11月
- 2004年8月
カテゴリー
メタ情報