Ladeni multithreadove aplikace

Michal Krause michal na krause.cz
Čtvrtek Leden 20 22:41:36 CET 2000


Zdravim,

pisu (ted uz hlavne ladim) multithreadovou aplikaci (s pthreads).
Jde o implementaci toho jednouceloveho HTTP serveru, o kterem jsme se
tady bavili asi pred mesicem, kdyz jsme probirali moznosti paralelizace
Navrcholu, takze princip aplikace je nasledujici: hlavni thread ceka na
pozadavky (accept()) a pak otevereny socket predava pracovnim threadum,
ktere ctou, parsuji a vyrizuji requesty.

Problem je, ze pracovni thread (zatim to testuju s jednim) mi ze zatim 
neznamych duvodu duvodu kolabuje. Jelikoz ani s pomoci ladicich vypisu
jsem nebyl schopen najit pricinu, zkusil jsem gdb, jenze jsem se zase moc
nedozvedel. Aplikace normalne bezi, dela co ma a pak, z niceho nic gdb
zahlasi:

ptrace in stop_thread: No such process.

a where vypise

#0  0x400f7556 in __libc_read ()
#1  0x4001f459 in read (fd=9, buf=0xbf5ff944, count=2048) at
	wrapsyscall.c:114
#2  0x8049d5a in safe_io (direction=0, fds=0xbf5ff2b4, tv=0xbf5fed6c,
	sockfd=0x806aa70, buf=0xbf5ff944 "GET /cgi-bin/..."
	http://web.navrcholu.cz/cgi-bin/4web/nv_details\r\nAccept-Langu"...,
	size=2048, timeout=20) at threads_func.c:57
#3  0x804a0f5 in main_thread_routine (arg=0x393d3938) at
	threads_func.c:172
#4  0x31323130 in ?? ()

Jak vidno, thread se zrovna nachazel ve volani funkce read(), jindy to
bylo zase v sprintf, nebo fprintf, zadny system v tom nevidim. A hlavne
nechapu, proc vlastne thread zkolaboval. Jeho pad nijak neovlivni beh
ostatnich threadu.

Pokud spustim program primo, bez debuggeru, dostane se po case do
stadia, ze pracovni thread zmizi, ten thread, ktery vznika automaticky
bez meho pricineni (manager) se tvari jako zombie, wchan je do_exit a
hlavni thread ceka v cyklu, az bude mit nejaky thread cas na dalsi
pozadavek (coz se samozrejme uz nestane).

Takze jsem se chtel zeptat zkusenejsich, jestli lze z vyse uvedeneho
zjistit mozna pricina, pripadne jak postupovat, abych chybu nasel. Nezda
se mi, ze by to byl nejaky signal, to by asi zkolabovala cela aplikace,
nebo by to alespon debugger poznal, ne? Navic je mi divna ta hlaska
"ptrace in stop_thread: No such process". To stop_pthread snad naznacuje,
ze jde o korektni ukonceni threadu? Neni to vyloucene, ale pak by musel
byt chybny ten vypis stacku (where).

Uz nevim, co bych zkusil, takze diky za kazdou radu...

S pozdravem
--
Michal Krause                                                      /\
ICQ: 7665279            Informace (nejenom) ze sveta Linuxu     /\/  \
email: mike na navrcholu.cz ______ http://www.root.cz/ ______ NAVRCHOLU.cz

Co napsat do signatury, aby to nikoho nepohorsilo? Snad jedine nejakou
obecne znamou pravdu. Doufam, ze vsichni vite, ze tucnak je bylozrava ryba. 


Další informace o konferenci Linux