Kevin a soumis à The Daily WTF un gestionnaire d'exceptions trouvé dans une base de code C++. Il intercepte Exception::Deadlock et exécute une seule instruction : retry. Ce n'est pas un mot-clé C++, donc il s'agit forcément d'une macro, probablement un goto déguisé qui renvoie au début du bloc protégé.
catch (Exception::Deadlock)
{
retry;
}Le problème est fondamental. Un deadlock signifie que ce thread attend une ressource détenue par un autre thread, lequel attend lui-même une ressource détenue par le premier. Recommencer ne sert à rien si le retry ne libère pas d'abord les ressources détenues, pour laisser l'autre thread avancer. Selon Kevin, ce retry ne libère rien. Il repart simplement en haut en conservant tout, ce qui garantit le même deadlock en boucle.
Le comble : le code souffrait déjà d'une collection de deadlocks, et l'entreprise avait fait appel à un consultant grassement payé pour les corriger en réordonnant les accès et en traçant les mutex. Ce gestionnaire est le fruit de cette mission. Verdict de Kevin : apparemment, le consultant tenait à ajouter quelques deadlocks de son cru.
Commentaires
Pas encore de commentaire — écris le premier.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.