This is the mail archive of the glibc-bugs@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug nptl/300] pthread_cond_timedwait does not reacquire the mutex on cancelation


------- Additional Comments From jakub at redhat dot com  2004-08-11 20:25 -------
If needed it can be a switch based on signal number or siginfo_t content.
But what I see as a bigger problem is how to do this + 1 thingie.

On x86-64 (and some arches) there are a few spare words in struct sigcontext,
so MD_FALLBACK_FRAME_STATE_FOR can store there the interemented value and point
REG_SAVED_OFFSET there.
But on i386 I haven't found such spare word anywhere.
DW_CFA_expression is only able to compute address of some value, not the actual
value itself (nor is able to store something to a memory slot).
Using some hack with setting a flag in MD_FALLBACK_FRAME_STATE_FOR for signal
frame is not good either, since .eh_frame for the signal trampoline is these
days in the vDSO on some arches, so there needs to be a way to express it there.
Even if e.g. a DW_CFA_* value is allocated to signal say that retaddr points
before the instruction, not after it, if kernel starts using it in its vDSO,
old libgcc_s.so.1's will stop working.

NPTL could go the libgcj way in its sigcancel_handler and increment (in
architecture specific macro) the pc value, but I don't think that's a good idea
(it would stop working if GCC ever decides to somehow solve this issue and more
importantly, backtrace () would never work through signal frames and neither
generic forced unwinding or exception handling through signal frames).


-- 


http://sources.redhat.com/bugzilla/show_bug.cgi?id=300

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]