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