Kevin hat bei The Daily WTF einen Exception-Handler aus einer C++-Codebasis eingereicht. Er fängt Exception::Deadlock und führt eine einzige Anweisung aus: retry. Das ist kein C++-Schlüsselwort, also muss es ein Makro sein, vermutlich eines, das ein goto verpackt und an den Anfang des geschützten Blocks zurückspringt.

exception handler
catch (Exception::Deadlock)
{
 retry;
}

Das Problem ist grundsätzlicher Natur. Ein Deadlock bedeutet: Dieser Thread wartet auf eine Ressource, die ein anderer Thread hält, und dieser wartet umgekehrt auf eine Ressource des ersten Threads. Ein Retry hilft nur, wenn dabei die eigenen Ressourcen freigegeben werden, damit der andere Thread weiterlaufen kann. Laut Kevin passiert genau das nicht. Der Code springt einfach zurück nach oben, hält alles fest und garantiert so denselben Deadlock erneut.

Die Pointe: Die Codebasis litt bereits unter einer ganzen Reihe von Deadlocks, also holte die Firma einen hochbezahlten Berater ins Haus, der den Zugriff neu ordnen und Mutex-Nutzung nachverfolgen sollte. Dieser Handler ist das Ergebnis dieses Einsatzes. Kevins Fazit: Offenbar wollte der Berater noch ein paar eigene Deadlocks beisteuern.