This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
>>>>> On Mon, 17 Nov 2003 10:07:34 -0800, Ulrich Drepper <drepper@redhat.com> said:
>> Related question: it seems to me tst-cancel6 cannot possibly
>> succeed with NPTL _unless_ HAVE_FORCED_UNWIND is true?
Uli> That might be. It's no supported configuration anyway. I
Uli> think it's time to make configure fail in all these
Uli> non-standard environments. It was mainly useful when
Uli> developing. But now all the tools are there.
Looking some more into the cleanup-handler-based locking, I'm not sure
I understand why it is race-free. If I'm reading the code right,
we've got:
nptl/sysdeps/pthread/bits/stdio-lock.h:
# define _IO_acquire_lock(_fp) \
do { \
_IO_FILE *_IO_acquire_lock_file \
__attribute__((cleanup (_IO_acquire_lock_fct))) \
= (_fp); \
_IO_flockfile (_IO_acquire_lock_file);
libio/libioP.h:
static inline void
__attribute__ ((__always_inline__))
_IO_acquire_lock_fct (_IO_FILE **p)
{
_IO_FILE *fp = *p;
if ((fp->_flags & _IO_USER_LOCK) == 0)
_IO_funlockfile (fp);
}
What happens if a thread gets canceled right after declaring
_IO_acquire_lock_file, but before the _IO_flockfile() call? Wouldn't
that cause the cleanup-handler to be invoked and then
_IO_funlockfile() to be called erroneously?
Or is NPTL simply not making any correctness-guarantees when
PTHREAD_CANCEL_ASYNCHRONOUS is in effect? If so, I'm still wondering
what would happen if a signal occurred at that point and then signal
handler called some cancellable routine (such as write())?
--david
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |