pthreadat program hänger linux
Postat: 02 jul 2011, 14:51
Hejsan
Håller på med ett stort projekt på jobbet och har lite problem. Skriver ett eget multitrådprogram i C med PTHREAD's. Har 6 trådar för tillfället. Programmet gör en hiskeligt massa queries mot en lokal MySQL databas på burken och kommunicerar med extern hådvara via RS232. Burken är en eBox-3300 som kör ubuntu 10.05 LTS server med en egenkompilerad kärna för specialdrivrutiner som behövs för processorn (Vortex86dx) i datorn.
Problemet vi har är att sporadiskt, iband efter 1 timme, ibland efter 1 vecka eller ett par månader, så hänger sig burken. Helsvart på skärmen, tangentbordet slutar fungera, CAPS lampan slocknar tom, går ej att komma åt via SSH, den verkar faktiskt försvinna från nätverket oxå då man inte ser den i routern när den hängt sig. Syns ingenting i någon logg, allt stoppas abrupt..
För en vecka sedan hittade jag ett par funktioner som användes i koden på ett par ställen som inte var trådsäkra, localtime() och strtok(), de är nu bytta mot sina trådsäkra varianter localtime_r() och strtok_r(). Ambitionen är givetvis att alltid använda trådsäkra funktioner, men man kan ju missa.... Än så länge har vi inte sett att burken hängt sig efter denna ändring, men man är ju lite osäker.
Så jag har två frågor att börja med:
1: Är det ens möjligt att skriva en applikation i user-space som kan hänga kärnan?
2: Skulle ett pthreadat program med trådosäkra funktioner kunna hänga kärnan? Borde man då inte bara få ett segmenteringsfel och en coredump?
Håller tummarna att den inte hänger sig....
Tacksam för svar
/Henrik
edit: Och givetvis, om svaret är nej på ovanstående frågor, vad skulle det då kunna vara?
Håller på med ett stort projekt på jobbet och har lite problem. Skriver ett eget multitrådprogram i C med PTHREAD's. Har 6 trådar för tillfället. Programmet gör en hiskeligt massa queries mot en lokal MySQL databas på burken och kommunicerar med extern hådvara via RS232. Burken är en eBox-3300 som kör ubuntu 10.05 LTS server med en egenkompilerad kärna för specialdrivrutiner som behövs för processorn (Vortex86dx) i datorn.
Problemet vi har är att sporadiskt, iband efter 1 timme, ibland efter 1 vecka eller ett par månader, så hänger sig burken. Helsvart på skärmen, tangentbordet slutar fungera, CAPS lampan slocknar tom, går ej att komma åt via SSH, den verkar faktiskt försvinna från nätverket oxå då man inte ser den i routern när den hängt sig. Syns ingenting i någon logg, allt stoppas abrupt..
För en vecka sedan hittade jag ett par funktioner som användes i koden på ett par ställen som inte var trådsäkra, localtime() och strtok(), de är nu bytta mot sina trådsäkra varianter localtime_r() och strtok_r(). Ambitionen är givetvis att alltid använda trådsäkra funktioner, men man kan ju missa.... Än så länge har vi inte sett att burken hängt sig efter denna ändring, men man är ju lite osäker.
Så jag har två frågor att börja med:
1: Är det ens möjligt att skriva en applikation i user-space som kan hänga kärnan?
2: Skulle ett pthreadat program med trådosäkra funktioner kunna hänga kärnan? Borde man då inte bara få ett segmenteringsfel och en coredump?
Håller tummarna att den inte hänger sig....
Tacksam för svar
/Henrik
edit: Och givetvis, om svaret är nej på ovanstående frågor, vad skulle det då kunna vara?