From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: Re: [Jackit-devel] alsa_driver_wait -> libasound? Date: Tue, 14 Jan 2003 18:03:06 +0100 Sender: alsa-devel-admin@lists.sourceforge.net Message-ID: References: <200301141647.h0EGldCg019400@spider.tela.com> Mime-Version: 1.0 (generated by SEMI 1.14.4 - "Hosorogi") Content-Type: text/plain; charset=US-ASCII Return-path: In-Reply-To: <200301141647.h0EGldCg019400@spider.tela.com> Errors-To: alsa-devel-admin@lists.sourceforge.net List-Help: List-Post: List-Subscribe: , List-Unsubscribe: , List-Archive: To: Paul Davis Cc: Josh Haberman , jackit-devel@lists.sourceforge.net, alsa-devel@lists.sourceforge.net List-Id: alsa-devel@alsa-project.org At Tue, 14 Jan 2003 11:47:58 -0500, Paul Davis wrote: > > >> that said, i think it would be great if this found its way into libasound. > > > >is the below code ok? > > > >int snd_pcm_wait_many(snd_pcm_t **handles, int num_handles, int timeout) > >{ > > struct pollfd *pfds; > > int i, err; > > pfds = (struct pollfd *)alloca(sizeof(*pfds) * num_handles); > > if (! pfds) > > reutrn -ENOMEM; > > for (i = 0; i < num_handles; i++) { > > err = snd_pcm_poll_descriptors(handles[i], &pfds[i], 1); > > assert(err == 1); > > } > > err = poll(pfds, num_handles, timeout); > > if (err < 0) > > return -errno; > > return err > 0 ? 1 : 0; > >} > > this isn't even close. the function in question waits until each and > every handle is ready. that means reentering poll over and over again > until each handle is ready, making sure to only poll on the handles > that are not yet ready (because otherwise poll returns immediately). > > the semantics are not "wait for any one many", its "wait for all or an > error". ah, now got the meaning. so, something like that... // set up pfds... ... for (;;) { err = poll(pfds, num_handles, timeout); if (err < 0) return -errno; else if (err == 0) return 0; i = 0; while (i < num_handles) { if (pfds[i].revents & POLLOUT) { num_handles--; memmove(pfds + i + 1, pfds + i, sizeof(*pfds) * (num_handles - i)); } else i++; } } return 1; Takashi ------------------------------------------------------- This SF.NET email is sponsored by: FREE SSL Guide from Thawte are you planning your Web Server Security? Click here to get a FREE Thawte SSL guide and find the answers to all your SSL security issues. http://ads.sourceforge.net/cgi-bin/redirect.pl?thaw0026en