Mercurial > illumos > git > illumos-joyent
changeset 25431:871cc4355352
OS-6580 LX fails to handle futex_requeue correctly (#333)
Reviewed by: Dan McDonald <danmcd@joyent.com>
Reviewed by: Mike Zeller <mike.zeller@joyent.com>
Approved by: Dan McDonald <danmcd@joyent.com>
author | Jason King <jasonbking@users.noreply.github.com> |
---|---|
date | Wed, 30 Sep 2020 12:31:40 -0500 |
parents | f57f3c747779 |
children | 1cdaa18973ab |
files | usr/src/uts/common/brand/lx/syscall/lx_futex.c |
diffstat | 1 files changed, 12 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/brand/lx/syscall/lx_futex.c Tue Sep 29 11:36:29 2020 +0000 +++ b/usr/src/uts/common/brand/lx/syscall/lx_futex.c Wed Sep 30 12:31:40 2020 -0500 @@ -1401,12 +1401,23 @@ break; case FUTEX_CMP_REQUEUE: - case FUTEX_REQUEUE: rval = futex_requeue(&memid, &memid2, val, val2, (void *)addr2, &val3); break; + case FUTEX_REQUEUE: + /* + * Per Linux futex(2), FUTEX_REQUEUE is the same as + * FUTEX_CMP_REQUEUE, except val3 is ignored. futex_requeue() + * will elide the val3 check if cmpval (the last argument) is + * NULL. + */ + rval = futex_requeue(&memid, &memid2, val, + val2, (void *)addr2, NULL); + + break; + case FUTEX_LOCK_PI: rval = futex_lock_pi(&memid, (uint32_t *)addr, tptr, B_FALSE); break;