funkce readdir(DIR *dir) a SIGSEGV - vyreseno

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Čtvrtek Červenec 20 17:12:01 CEST 2000


On Tue, 18 Jul 2000, Petr Novotny wrote:

> Jak tohle funguje v multithreaded aplikaci? Chci rict, je SIGSEGV 
> "lokalni" pro thread?

Signaly a thready je strasne temna zalezitost, nicmene u "synchronnich"
signalu (SEGV, BUS, FPE, PIPE...) by melo platit, ze budou doruceny tomu
threadu, ktery si je svym chovanim zaslouzil (tj. jakoby by byly poslany
pomoci pthread_kill(pthread_self(), signo)).

> (Mimochodem, kdy prijde SIGSEGV a kdy SIGBUS?)

Single Unix Spec to popisuje takto:

SIGBUS  . . . Access to an undefined portion of a memory object
SIGSEGV . . . Invalid memory reference

Z doplnkovych kodu lze vyzkoumat, ze SIGSEGV znamena, ze na adrese neni
nic namapovaneho, nebo pristupova prava provadenou operaci nepripousteji,
zatimco SIGBUS znamena, ze adresa neni patricne zarovnana, je to
neexistujici fyzicke adrese (sic), nebo je to jina hw specificka chyba.

> Aha - to se asi neshodneme. Mnohdy je lepsi, kdyz ten program 
> vypise self-diagnostiku jeste pred zhebnutim; je to o _hodne_ lepsi 
> nez post-mortem analyza core dumpu (zvlast, kdyz pujde o nekolik 
> mesicu az let stary kod).

Ne, mnohem lepsi je mit od vsech verzi, co nekde bezi, schovanou kompletni
dokumentaci, zdrojaky a vsechny soubory, ktere jsou nainstalovane, aby 
ta post-mortem analyza byla snadno proveditelna. :)

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux