Přerušení write při startu vlákna
Jiri Kosina
jikos na jikos.cz
Středa Březen 14 15:30:06 CET 2007
On Tue, 13 Mar 2007, Ladislav Vaiz wrote:
> 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.
Toto chovani je v souladu s POSIXem, a Vase aplikace by na nej mela byt
pripravena. Viz [1], predevsim pak
"If write() is interrupted by a signal after it successfully writes some
data, it shall return the number of bytes written."
[1] http://www.opengroup.org/onlinepubs/009695399/functions/write.html
--
Jiri Kosina
Další informace o konferenci Linux