Patch for Linux Futexes

From: Hans Petter Selasky <hps_at_selasky.org>
Date: Thu, 22 May 2014 13:06:22 +0200
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
> _at__at_ -498,7 +498,7 _at__at_ 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;
>  	}
> _at__at_ -525,7 +525,7 _at__at_ 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);
Received on Thu May 22 2014 - 09:05:41 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:49 UTC