A Ovest Di Paperino

Welcome to the dark side.

Passa codice

Leggendo il blog di Coding Horror, ho avuto occasione di riflettere sulla seguente frase:

Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live.

È un paio di giorni che mi sento un po’ shining:

the_shining

L’aggiunta di una piccola feature nel prodotto a cui sto lavorando, così piccola che si può descrivere con pochissime pagine fin nei minimi dettagli, mi ha costretto a riscrivere quasi ex-novo del codice non mio. Ho pensato che se mi avessero dato una mazza da baseball ne avrei combinata qualcuna delle mie: poi mi sono decisamente calmato quando ho preso in considerazione la scarsa esperienza iniziale di chi ha scritto quel codice. Non che il codice sia terribile, ma diciamo che il refactoring è diventato un pretesto per fare di necessità virtù e tirare fuori un paio di query micidiali fuori da un loop ammazza prestazioni.

E a proposito di codice, lascio un quesito per i volenterosi ricavato dall’esperienza con blogoo: la classe SyncLRUMap in questo pezzo di codice “autosufficiente” di C# ha qualche problema di multi-threading che si verifica abbastanza sporadicamente. Quando si verifica un eccezione di tipo Null Reference viene generata ed il call stack è il seguente:

System.NullReferenceException:
Object reference not set to an instance of an object.
at Commons.Collections.LRUMap.IndexOf(Object key)
at Commons.Collections.LRUMap.MoveToMRU(Object key)
at Commons.Collections.LRUMap.get_Item(Object key)
at Commons.Collections.LRUMap.SyncLRUMap.get_Item(Object key)

Una volta che si verifica il guaio la collezione risulta permanentemente corrotta, ovvero l’oggetto membro ObjectList finisce per contenere un null. Un indizio per la soluzione (che io spero di aver individuato) è indicato in questo thread. Un ulteriore indizio lo si può individuare riflettendo sull’implementazione di ArrayList. Spero di aver stuzzicato abbastanza curiosità.

-quack

Technorati Tags: