Patch for Linux Futexes
Hans Petter Selasky
hps at selasky.org
Thu May 22 11:05:41 UTC 2014
Hi,
When using the Linux Skype client under FreeBSD I sometimes see that the
Audio disappears in the one direction. When I check "ps auxw" I see
skype is stuck on a so-called Futex. I looked into the Linux futex code
and see that wakeup_one() is used instead of wakeup(). Maybe others can
test too and verify if replacing wakeup_one() by wakeup() makes any
difference in for Linux applications using Futexes.
--HPS
> diff --git a/sys/compat/linux/linux_futex.c b/sys/compat/linux/linux_futex.c
> index 9b4c92f..e893bf4 100644
> --- a/sys/compat/linux/linux_futex.c
> +++ b/sys/compat/linux/linux_futex.c
> @@ -498,7 +498,7 @@ futex_wake(struct futex *f, int n, uint32_t bitset)
> wp->wp_flags |= FUTEX_WP_REMOVED;
> TAILQ_REMOVE(&f->f_waiting_proc, wp, wp_list);
> LIN_SDT_PROBE1(futex, futex_wake, wakeup, wp);
> - wakeup_one(wp);
> + wakeup(wp);
> if (++count == n)
> break;
> }
> @@ -525,7 +525,7 @@ futex_requeue(struct futex *f, int n, struct futex *f2, int n2)
> wp->wp_flags |= FUTEX_WP_REMOVED;
> TAILQ_REMOVE(&f->f_waiting_proc, wp, wp_list);
> LIN_SDT_PROBE1(futex, futex_requeue, wakeup, wp);
> - wakeup_one(wp);
> + wakeup(wp);
> } else {
> LIN_SDT_PROBE3(futex, futex_requeue, requeue,
> f->f_uaddr, wp, f2->f_uaddr);
More information about the freebsd-multimedia
mailing list