mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2026-02-17 22:05:18 -05:00
control, pcm: implement snd_ctl_abort() and snd_pcm_abort() functions
Upon an interrupt, it is necessary to abort the wait loops with the EINTR error code. Introduce snd_*_abort() functions to handle this case. Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
730c833dd8
commit
e23fb2c4de
7 changed files with 17 additions and 4 deletions
|
|
@ -103,7 +103,7 @@ int snd_ctl_close(snd_ctl_t *ctl)
|
|||
/**
|
||||
* \brief set nonblock mode
|
||||
* \param ctl CTL handle
|
||||
* \param nonblock 0 = block, 1 = nonblock mode
|
||||
* \param nonblock 0 = block, 1 = nonblock mode, 2 = abort
|
||||
* \return 0 on success otherwise a negative error code
|
||||
*/
|
||||
int snd_ctl_nonblock(snd_ctl_t *ctl, int nonblock)
|
||||
|
|
|
|||
|
|
@ -98,3 +98,5 @@ int _snd_ctl_poll_descriptor(snd_ctl_t *ctl);
|
|||
int snd_ctl_hw_open(snd_ctl_t **handle, const char *name, int card, int mode);
|
||||
int snd_ctl_shm_open(snd_ctl_t **handlep, const char *name, const char *sockname, const char *sname, int mode);
|
||||
int snd_ctl_async(snd_ctl_t *ctl, int sig, pid_t pid);
|
||||
|
||||
#define CTLINABORT(x) ((x)->nonblock == 2)
|
||||
|
|
|
|||
|
|
@ -696,7 +696,7 @@ int snd_hctl_wait(snd_hctl_t *hctl, int timeout)
|
|||
pollio = 0;
|
||||
err_poll = poll(pfd, npfds, timeout);
|
||||
if (err_poll < 0) {
|
||||
if (errno == EINTR)
|
||||
if (errno == EINTR && !CTLINABORT(hctl->ctl))
|
||||
continue;
|
||||
return -errno;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue