Ne jamais suspendre un thread dans son propre processus !

2025-04-15
Ne jamais suspendre un thread dans son propre processus !

Un client a rencontré un problème de blocage de faible fréquence et de longue durée : son thread d’interface utilisateur appelait le noyau et se bloquait simplement. Le vidage du noyau n’a pas pu afficher une trace de pile en mode utilisateur car la pile avait été échangée. L’enquête a révélé un thread watchdog qui suspendait périodiquement le thread d’interface utilisateur pour capturer des traces de pile, mais cette fois, il s’est bloqué pendant plus de cinq heures. La cause racine : une interblocage. Le thread watchdog, essayant d’obtenir une trace de pile, avait besoin d’un verrou de table de fonctions, mais le thread d’interface utilisateur était suspendu, en maintenant le verrou. L’article souligne qu’il ne faut jamais suspendre un thread dans son propre processus, car cela augmente le risque d’interblocages en raison de la contention des ressources. Pour suspendre un thread et capturer sa pile, faites-le à partir d’un autre processus afin d’éviter les interblocages.