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.
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.
Kommentare
Noch keine Kommentare — schreib den ersten.
Starte die Diskussion
Kein Konto, kein Passwort nötig — gib einfach deine E-Mail-Adresse ein, wir senden dir einen einmaligen Anmelde-Link. Beim ersten Mal bist du damit automatisch angemeldet.
Deine Bewertung wird nach der Anmeldung automatisch übernommen.
Schau in dein Postfach
Wir haben einen Anmelde-Link an … gesendet. Öffne ihn auf diesem Gerät — dieser Tab meldet dich automatisch an.
Nichts angekommen? Wirf einen Blick in den Spam-Ordner — und markiere die Mail dort als „Kein Spam“, dann landet sie künftig direkt im Postfach.