私は複数のタイマーを持つアプリケーションで作業しています。アプリケーションが起動すると、私はいくつかのポインタがタイマを指していることを除いて、すべてが標準として実行されます。タイマー(timer_list)を完全に解放する方法は?
私は私の目的を明確にするために、サンプルコードの一部が表示されます:
---------------------------のinitのfoo ---------------------
init_timer(&timer1);//timer1 definition is outside the function, as struct timer_list timer1
timer1.expires = jiffies+SECONDS_TO_JIFFIES(5);
timer1.data = (unsigned long) data;
timer1.function = callback_foo;
timer1_pointer = &timer1;//timer1_pointer definition is outside the function, as struct timer_list *timer1_pointer
------------------ init ---------------
add_timer(timer1_pointer);
------------------- deinit ------- --------------------
del_timer_sync(&timer1);
最初は正常に動作しますが、フロー全体(deinit-> init->他の関数 - > ...)が再び実行されると、add_timerで常にクラッシュします。
私は、デニットで何かが間違っていると感じさせます。削除タイマーは削除の代わりに切り離すだけなのでタイマのリストをメッシュアップして流れを再開してください。
安全な方法はありますか?それとも私が作ったミスを見つけたら?
デバッガでコードをステップ実行します。クラッシュした場所を見つけ、変数を調べて値を登録して、クラッシュする理由を理解してください。システムとコードについて詳しく知ることなく、より具体的な提案をすることはできません。少なくとも、add_timerとdel_timer_syncのソースを表示してください。 – kkrambo
タイマーコールバック内で扱っている共有リソースはありますか? – LinuxStuff