To get the behavior POSIX specifies ("If a signal is delivered to a
thread waiting for a mutex, upon return from the signal handler the
thread resumes waiting for the mutex as if it was not interrupted.")
would require additional handling, such as (I'm guessing) checking the
cause of the wake-up and looping if necessary. Admittedly I don't know
enough about the subject and the internals to propose a specific
solution yet.
I think that you could set a signal mask to block all signals except the
one that wakes up the timed wait and the one that could cancel the
task/thread.
There are some complexities and the possibility to break things. If you
want, you could just create an issue with all of the relevant
information and let it pend of awhile. I don't think there is any rush
to change this behavior, is there?