[voikko] Suomi-malaga 1.8rc1, outo bugi
Harri Pitkänen
hatapitk at iki.fi
Sun Nov 14 13:52:55 EET 2010
On Saturday 13 November 2010, Harri Pitkänen wrote:
> Suomi-malagaa voi silti testata, siihen tuskin tämän takia tulee muutoksia.
> Korjaus menee libvoikon puolelle.
Uusi libvoikko löytyy täältä:
http://www.puimula.org/htp/testing/libvoikko-3.1rc3.tar.gz
Muutin libvoikossa olevaa Malaga-toteutusta niin, että heap-muisti
tyhjennetään aina kun sanan analysointi saadaan valmiiksi. Tämä on hyödyllinen
optimointi, koska tuossa vaiheessa Malagan pinomuisti (stack) on aina tyhjä,
jolloin tiedetään, että heapissa ei oikeasti ole mitään säilyttämisen arvoista
(mikään ei voi viitata sinne). Aikaisemmin heap siivottiin ainoastaan silloin
kun se sattui tulemaan täyteen, mutta tämä tapahtui aina kesken analyysin,
jolloin jouduttiin etsimään ja kopioimaan talteen käytössä oleva muistin
sisältö. Tämä taas on verrattain hidasta.
Muutoksen varsinainen syy ei kuitenkaan ollut tuo optimointi vaan se, että nyt
peräkkäiset analyysit ovat toisistaan riippumattomia. Tämä helpottaa bugien
selvittelyä. Nyt kuitenkin on niin, että tämä bugi jota nyt tutkittiin,
edellytti esiintyäkseen sen, että heapissa on vanhoja roskia analyysin alussa.
Siispä bugi ei enää pysty toistamaan, enkä ole löytänyt muutakaan tapausta,
jossa se esiintyisi. Melko varmasti bugi edelleen on olemassa, mutta jos se on
näinkin harvinainen kuin se tuntuisi olevan ja vaikutukset näin vähäiset, en
viitsi lykätä julkaisua enempää ellei joku tässä välissä onnistu löytämään
uutta esimerkkisanaa, jolla sen voisi toistaa.
Teoriani bugista on se, että jossain kohdassa koodissa käsitellään heapissa
olevaa muistilohkoa jonkin osoittimen kautta. Ja välissä laitetaan heapiin
jotain muuta, tässä välissä roskien keruu aktivoituu ja heapin sisäinen
järjestys muuttuu. Koodi kuitenkin jatkaa vanhan osoittimen käyttöä ja
kirjoittaakin nullin eri paikkaan kuin piti. Tämä on siis vain arvailua, mutta
jostain tällaisesta voisi olla oireiden perusteella kyse. Koska
muistiosoitteet ajokertojen välillä eivät muutu, tätä pystyy periaatteessa
jäljittämään gdb:llä muistiosoitteeseen kirjoituksesta aktivoituvan
breakpointin avulla. Mutta aika työlästä se on, joten en taida nyt jaksaa
tästä enempää jatkaa jos bugi ei edes enää toistu.
Harri
More information about the voikko
mailing list