[PATCH 1/3] winepulse: Use handles to represent the stream.
Jacek Caban
jacek at codeweavers.com
Thu Apr 21 05:13:22 CDT 2022
Hi Huw,
> @@ -131,6 +143,73 @@ static void pulse_broadcast(void)
> pthread_cond_broadcast(&pulse_cond);
> }
>
> +static unsigned int handle_alloc(struct pulse_stream *stream)
> +{
> + unsigned int index, count;
> + struct stream_entry *new_handles;
> +
> + pthread_mutex_lock(&handle_lock);
> +
> + index = next_free;
> + if(index != ~0u) next_free = handles[index].next_free;
> + else if(next_unused < num_handles) index = next_unused++;
> + else{
> + count = max(num_handles * 2, 256);
> + new_handles = realloc(handles, count);
realloc() size is missing multiplication by sizeof(*handles).
Other than that, the patch looks fine to me. One thing I'd mention for
consideration: while proper handle table is the right thing for true
kernel interface in general, I'm not sure if we need it in such cases.
We could just make the handle 64-bit and use Unix pointer as a value of
the handle. It would simplify things, but I can see how such "leak" of
Unix pointers may be considered less elegant, so it's fine with me both
ways.
Thanks,
Jacek
More information about the wine-devel
mailing list