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