Přerušení write při startu vlákna

Ladislav Vaiz spam na nagano.cz
Úterý Březen 13 21:56:27 CET 2007


Ahoj,
mám multithreadovou aplikaci psanou v C, používám thready z glib. 
Pracovní thready jsou vždy vytvářeny z hlavního threadu a provádí co 
nejjednodušší činnost. Jeden thread zapisuje do /dev/dsp funkcí write. 
Stává se, že se funkce write ukončí aniž by zapsala požadovaný počet 
bytů. Vrátí obecně různé kladné číslo, menší než počet bytů. 
Experimentálně jsem došel k tomu, že se to děje při vytváření dalších 
threadů pomocí g_thread_create() a navíc jen pod gdb.
Existuje pro to nějaké vysvětlení? Situaci dokážu detekovat a vyvolat 
write na zbytek dat. Asi to tak dopadne. Ale rád bych měl jasno v tom, 
co se tu vlastně děje.
Systém je Sarge, glibc 2.3.2, gdb 6.3-debian používá 
/lib/tls/libthread_db.so.1, glib 2.0.

Pracovní teorie: omylem někde nastavím O_NONBLOCK - nepotvrzeno, protože 
to zlobí jen pod gdb, což vylučuje použití strace.


Láďa




Další informace o konferenci Linux