samedi 13 octobre 2012

Bug, partie 2

Je l'ai trouvé! Une saleté de race condition qui m'a bien pourri la vie pendant 4 jours. Nous avons en effet dans le code le concept de souscription via callbacks vers des objets, et mon code en regardait la valeur avant de souscrire: résultat, si l'état changeait entre le moment où l'on regarde la valeur, et le moment où l'on souscrit, boum, un trou, et l'on restait sur l'ancienne valeur. Il a suffi d'utiliser une autre primitive qui permettait de souscrire et de récupérer la valeur atomiquement, et tout est rentré dans l'ordre.

Cela me rappelle un autre bug qui m'avait également tenu en haleine pour un bon bout de temps: au final, c'était juste une fonction de hachage qui avait un buffer marqué par erreur comme "static", c'est à dire grosso modo global. Cela rendait la fonction non ré-entrante, et causait donc des erreurs de lookup dans les tables de hachage lors des pics de charge.

Aucun commentaire: