1

Je travaille sur une application avec plusieurs temporisateurs. Lorsque l'application démarre, tout fonctionne simplement en standard, sauf que certains pointeurs pointent vers la minuterie.Comment libérer complètement une minuterie (timer_list)?

Je vais montrer un morceau de code exemple pour clarifier mon but:

--------------------------- foo initialisation ---------------------

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 

------------------ l'autre fonction après init ---------------

add_timer(timer1_pointer); 

------------------- deinit ------- --------------------

del_timer_sync(&timer1); 

Cela fonctionne bien au début, mais il se bloque toujours à add_timer lorsque l'ensemble du flux (deinit-> init-> l'autre fonction -> ...) s'exécute à nouveau.

Cela me donne l'impression que quelque chose ne va pas dans le deinit. Depuis la suppression de la minuterie seulement se détacher au lieu de supprimer. Réexécutez le flux peut mailler la liste des temporisateurs.

Y a-t-il donc des moyens de le libérer en toute sécurité? Ou si vous trouvez d'autres erreurs que j'ai faites?

+0

Parcourez le code avec le débogueur. Trouvez où il se bloque et examinez les variables et les valeurs de registre pour comprendre pourquoi il plante. Nous ne pouvons pas vous donner de suggestions plus spécifiques sans en savoir plus sur votre système et votre code. Au moins montrer la source pour 'add_timer' et' del_timer_sync'. – kkrambo

+0

Y a-t-il des ressources partagées auxquelles vous avez affaire dans les rappels de minuterie? – LinuxStuff

Répondre

0

OK, puisque personne n'a répondu, je viens de poster quelques réflexions et j'ai finalement prouvé que c'est vraiment la raison qui a déclenché le crash.

Il semble que, si le minuteur doit être relancé et supprimé parfois lors d'une application longue durée, il est nécessaire de libérer/nettoyer la liste timer_list. Ce del_timer_sync/del_timer pas vraiment supprimer comme je le pensais. Puisque le projet sur lequel je travaille est compliqué, je suppose que certains mecs ne font que compliquer les choses et m'affectent ... Je vais essayer de le digérer plus tard si j'ai le temps.