[PATCH 2/6] winealsa: Allocate the pollfd array at the start.

Andrew Eikum aeikum at codeweavers.com
Fri Mar 25 08:59:16 CDT 2022


Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>

On Fri, Mar 25, 2022 at 08:42:15AM +0000, Huw Davies wrote:
> Signed-off-by: Huw Davies <huw at codeweavers.com>
> ---
>  dlls/winealsa.drv/midi.c | 30 +++++++++---------------------
>  1 file changed, 9 insertions(+), 21 deletions(-)
> 
> diff --git a/dlls/winealsa.drv/midi.c b/dlls/winealsa.drv/midi.c
> index 8009b23ce3d..4cc906b03ca 100644
> --- a/dlls/winealsa.drv/midi.c
> +++ b/dlls/winealsa.drv/midi.c
> @@ -158,33 +158,21 @@ static int midiCloseSeq(void)
>  static DWORD WINAPI midRecThread(void *arg)
>  {
>      snd_seq_t *midi_seq = arg;
> -    int npfd;
> -    struct pollfd *pfd;
> +    int num_fds;
> +    struct pollfd *pollfd;
>      int ret;
>  
> -    TRACE("Thread startup\n");
> +    num_fds = snd_seq_poll_descriptors_count(midi_seq, POLLIN);
> +    pollfd = malloc(num_fds * sizeof(struct pollfd));
>  
>      while(!end_thread) {
> -	TRACE("Thread loop\n");
>          seq_lock();
> -	npfd = snd_seq_poll_descriptors_count(midi_seq, POLLIN);
> -	pfd = HeapAlloc(GetProcessHeap(), 0, npfd * sizeof(struct pollfd));
> -	snd_seq_poll_descriptors(midi_seq, pfd, npfd, POLLIN);
> +        snd_seq_poll_descriptors(midi_seq, pollfd, num_fds, POLLIN);
>          seq_unlock();
>  
>  	/* Check if an event is present */
> -	if (poll(pfd, npfd, 250) <= 0) {
> -	    HeapFree(GetProcessHeap(), 0, pfd);
> -	    continue;
> -	}
> -
> -	/* Note: This definitely does not work.  
> -	 * while(snd_seq_event_input_pending(midi_seq, 0) > 0) {
> -	       snd_seq_event_t* ev;
> -	       snd_seq_event_input(midi_seq, &ev);
> -	       ....................
> -	       snd_seq_free_event(ev);
> -	   }*/
> +        if (poll(pollfd, num_fds, 250) <= 0)
> +            continue;
>  
>  	do {
>              snd_seq_event_t *ev;
> @@ -202,9 +190,9 @@ static DWORD WINAPI midRecThread(void *arg)
>              ret = snd_seq_event_input_pending(midi_seq, 0);
>              seq_unlock();
>  	} while(ret > 0);
> -
> -	HeapFree(GetProcessHeap(), 0, pfd);
>      }
> +
> +    free(pollfd);
>      return 0;
>  }
>  
> -- 
> 2.25.1
> 
> 



More information about the wine-devel mailing list