在 Slashdot 看到 Zune 當機的原始程式碼被釋出的消息:「The Exact Cause of the Zune Meltdown」。
程式碼在 #349916 這裡,會當機主要是因為沒有考慮到閏秒。(最少在 ConvertSeconds、SetTime 以及 CheckRealTime 這三個函式有這個問題)
Update:會當機的原因請參考 comment 裡 kcwu 寫的說明。
幹壞事是進步最大的原動力
在 Slashdot 看到 Zune 當機的原始程式碼被釋出的消息:「The Exact Cause of the Zune Meltdown」。
程式碼在 #349916 這裡,會當機主要是因為沒有考慮到閏秒。(最少在 ConvertSeconds、SetTime 以及 CheckRealTime 這三個函式有這個問題)
Update:會當機的原因請參考 comment 裡 kcwu 寫的說明。
根據 http://www.aeroxp.org/2009/01/lesson-on-infinite-loops/ 問題出在閏年的年底會掉入無窮迴圈, 跟閏秒無關
應該是閏年問題, 是ConvertDays 在閏年多出的一天會infinite loop. 所以第二天(即第二年的第一天)就沒事了.
雖然ConvertSeconds 真的有問題, 如果多一秒也只會return false, 沒大礙. 我也不認為Zune 會知道今年多出一秒 (會和atomic clock sync 的嗎? Leap year 也只是計出來, Leap Second 是Table lookup)
何況如果是閏秒問題, 大概只要立即重啟就可了, 不需要等一天.
更正: Leap Second 只有Historical Record 才會look up, 未來的要靠Sync