Skip to content

Commit

Permalink
Fix recursive mutex (WebAssembly#433)
Browse files Browse the repository at this point in the history
the robust mutex logic in musl seems to assume that
the bit 29 of TIDs is always zero for some reasons.

from https://git.musl-libc.org/cgit/musl/commit/?id=099b89d3840c30d7dd962e18668c2e6d39f0c626
> note that the kernel ABI also reserves bit 29
> not to appear in any tid,

i'm not sure if the assumption is true or not, given that
FUTEX_TID_MASK is 0x3fffffff.

anyway, when using non-default type of mutex like recursive mutex,
it causes problems as we actually use TID 0x3fffffff for the main thread.

as we don't support robust mutex anyway, this commit simply
comments out the problematic condition.

fixes: bytecodealliance/wasm-micro-runtime#2466
  • Loading branch information
yamt authored Aug 21, 2023
1 parent 9f51a71 commit ec4566b
Showing 1 changed file with 2 additions and 0 deletions.
2 changes: 2 additions & 0 deletions libc-top-half/musl/src/thread/pthread_mutex_trylock.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ int __pthread_mutex_trylock_owner(pthread_mutex_t *m)
return 0;
}
}
#ifdef __wasilibc_unmodified_upstream
if (own == 0x3fffffff) return ENOTRECOVERABLE;
#endif
if (own || (old && !(type & 4))) return EBUSY;

if (type & 128) {
Expand Down

0 comments on commit ec4566b

Please sign in to comment.