Ho passato tutta questa domenica mattina cercando di risolvere questo strano bug che si verificava in Vala Toys
A differenza di quanto scritto nel bug report dopo un po’ di prove ho notato:
- non era dovuto al multithread implementato nel parser di Vala Toys
- era di facile riproduzione, ma si verificava solo con un determinato file sorgente incluso nel progetto di esempio di waf
- non dipendeva da qualche stato interno del modello in quando si verificava anche ricreando ogni volta il sortmodel da zero
Dopo svariate ore ne sono venuto fuori anche grazie a questo post che, sebbene non del tutto pertinente, mi ha quanto meno messo una pulce nell’orecchio: ricontrollare la funzione utilizzata per il sort.
Ed ecco che gira e rigira noto subito un bug alla riga 539 di vtgutils.vala dove erroneamente utilizzo la variabile vala invece che valb, ma soprattutto mi rendo conto che la funzione cosi’ come è scritta non è asimmetrica (caratteristica richiesta dalla documentazione della GtkTreeIterCompareFunc).
Quest’ultimo errore è anche confermato dall’output di debug che avevo aggiunto al codice e spiega anche come mai il segfault lo avessi solo con quel determinato sorgente:
Sistemato quest’ultimo dettaglio il segfault è magicamente scomparso.
Da ciò ho imparato:
- Se un’implentazione è errata anche se sembra un errore innocuo, il segfault è sempre dietro l’angolo
- E’ umanamente possibile superare il limite fissato dal ‘Moccolo a Delta di Dirac’
P.S.
E’ uscito Vala Toys versione 0.10.0