Monthly Archives: September 2010

Gtk+ TreeSortModel ed oscuri segfaults

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:

ValaToys-INFO: vtgsourceoutlinerview.vala:375: compare constructor:Sample vs new result: -1
ValaToys-INFO: vtgsourceoutlinerview.vala:375: compare new vs constructor:Sample result: -1

Sistemato quest’ultimo dettaglio il segfault è magicamente scomparso.

Da ciò ho imparato:

  1. Se un’implentazione è errata anche se sembra un errore innocuo, il segfault è sempre dietro l’angolo
  2. E’ umanamente possibile superare il limite fissato dal ‘Moccolo a Delta di Dirac’

P.S.

E’ uscito Vala Toys versione 0.10.0