[PATCH 2/6] winealsa: Allocate the pollfd array at the start.
Huw Davies
huw at codeweavers.com
Fri Mar 25 03:42:15 CDT 2022
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