1

私は複数のタイマーを持つアプリケーションで作業しています。アプリケーションが起動すると、私はいくつかのポインタがタイマを指していることを除いて、すべてが標準として実行されます。タイマー(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で常にクラッシュします。

私は、デニットで何かが間違っていると感じさせます。削除タイマーは削除の代わりに切り離すだけなのでタイマのリストをメッシュアップして流れを再開してください。

安全な方法はありますか?それとも私が作ったミスを見つけたら?

+0

デバッガでコードをステップ実行します。クラッシュした場所を見つけ、変数を調べて値を登録して、クラッシュする理由を理解してください。システムとコードについて詳しく知ることなく、より具体的な提案をすることはできません。少なくとも、add_timerとdel_timer_syncのソースを表示してください。 – kkrambo

+0

タイマーコールバック内で扱っている共有リソースはありますか? – LinuxStuff

答えて

0

誰も回答していないので、私はちょうどいくつかの考えを投稿し、私はついにクラッシュを誘発する理由を実証しました。

長時間のアプリケーションでタイマーを再起動して削除する必要がある場合は、timer_listを解放/消去する必要があります。このdel_timer_sync/del_timerは実際にはで、は削除されています。私が取り組んでいるプロジェクトは複雑なので、いくつかの男はちょっと混乱させて、私に影響を与えると思う。私は時間があればそれを後で掘り下げようとする。

関連する問題