Damien Zammit, le ven. 21 août 2026 08:44:24 +0000, a ecrit:
> In glibc pt-timedblock.c:
> 
>    if ((MSG_OPTIONS & MACH_RCV_INTERRUPT) != 0 && err == 
> MACH_RCV_INTERRUPTED)
>      return EINTR;
> 
> But MSG_OPTIONS is defined as 0, so this makes __pthread_timedblock 
> uninterruptible?

Yes, and that is expected, see the standard for pthread_mutex_timedlock
/ cond_timedwait: 

These functions shall not return an error code of [EINTR].

pthread locking functions are not interruptible. Only sem_wait is
interruptible.

> I am getting mach_msg_trap after mach_msg is sent and then a hang, if 
> you look at thread 11 in the previous backtrace.

But the question is: what was supposed to interrupt your timed block? Is
the condition of wake-up valid or not? Is the timeout value meaningful?

> I can't figure out if pt-timedblock-intr.c is selected or not at compile 
> time in glibc.
> Both versions seem to be in the htl/Makefile.

Both are compiled, yes. pt-timedblock-intr.c simply define the
interruptible __pthread_timedblock_intr version, which was probably used
before it got reimplemented into the current version.

Samuel

Reply via email to