mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-05 13:29:57 -05:00
try to use send(,,MSG_NOSIGNAL) instead of write() wherever possible (which
will allow us to drop the SIGPIPE check). Cache the results of the last write()/send() to make sure that we do not issue more than necessary system calls. git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@1083 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
parent
350a253dc5
commit
860be2e70b
17 changed files with 100 additions and 58 deletions
|
|
@ -59,7 +59,7 @@ int pa__init(pa_core *c, pa_module*m) {
|
|||
goto finish;
|
||||
}
|
||||
|
||||
if (pa_loop_write(fd, &x, sizeof(x)) != sizeof(x))
|
||||
if (pa_loop_write(fd, &x, sizeof(x), NULL) != sizeof(x))
|
||||
pa_log(__FILE__": WARNING: write(%u, 1, 1) failed: %s", fd, pa_cstrerror(errno));
|
||||
|
||||
close(fd);
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@ struct userdata {
|
|||
jack_nframes_t frames_requested;
|
||||
int quit_requested;
|
||||
|
||||
int pipe_fd_type;
|
||||
int pipe_fds[2];
|
||||
pa_io_event *io_event;
|
||||
|
||||
|
|
@ -120,7 +121,7 @@ static void io_event_cb(pa_mainloop_api *m, pa_io_event *e, int fd, pa_io_event_
|
|||
assert(u);
|
||||
assert(u->pipe_fds[0] == fd);
|
||||
|
||||
read(fd, &x, 1);
|
||||
pa_read(fd, &x, 1, &u->pipe_fd_type);
|
||||
|
||||
if (u->quit_requested) {
|
||||
stop_sink(u);
|
||||
|
|
@ -165,7 +166,7 @@ static void request_render(struct userdata *u) {
|
|||
assert(u);
|
||||
|
||||
assert(u->pipe_fds[1] >= 0);
|
||||
write(u->pipe_fds[1], &c, 1);
|
||||
pa_write(u->pipe_fds[1], &c, 1, &u->pipe_fd_type);
|
||||
}
|
||||
|
||||
static void jack_shutdown(void *arg) {
|
||||
|
|
@ -268,6 +269,7 @@ int pa__init(pa_core *c, pa_module*m) {
|
|||
u->core = c;
|
||||
u->module = m;
|
||||
u->pipe_fds[0] = u->pipe_fds[1] = -1;
|
||||
u->pipe_fd_type = 0;
|
||||
|
||||
pthread_mutex_init(&u->mutex, NULL);
|
||||
pthread_cond_init(&u->cond, NULL);
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@ struct userdata {
|
|||
int quit_requested;
|
||||
|
||||
int pipe_fds[2];
|
||||
int pipe_fd_type;
|
||||
pa_io_event *io_event;
|
||||
|
||||
jack_nframes_t frames_in_buffer;
|
||||
|
|
@ -119,7 +120,7 @@ static void io_event_cb(pa_mainloop_api *m, pa_io_event *e, int fd, pa_io_event_
|
|||
assert(u);
|
||||
assert(u->pipe_fds[0] == fd);
|
||||
|
||||
read(fd, &x, 1);
|
||||
pa_read(fd, &x, 1, &u->pipe_fd_type);
|
||||
|
||||
if (u->quit_requested) {
|
||||
stop_source(u);
|
||||
|
|
@ -166,7 +167,7 @@ static void request_post(struct userdata *u) {
|
|||
assert(u);
|
||||
|
||||
assert(u->pipe_fds[1] >= 0);
|
||||
write(u->pipe_fds[1], &c, 1);
|
||||
pa_write(u->pipe_fds[1], &c, 1, &u->pipe_fd_type);
|
||||
}
|
||||
|
||||
static void jack_shutdown(void *arg) {
|
||||
|
|
@ -266,6 +267,7 @@ int pa__init(pa_core *c, pa_module*m) {
|
|||
u->core = c;
|
||||
u->module = m;
|
||||
u->pipe_fds[0] = u->pipe_fds[1] = -1;
|
||||
u->pipe_fd_type = 0;
|
||||
|
||||
pthread_mutex_init(&u->mutex, NULL);
|
||||
pthread_cond_init(&u->cond, NULL);
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ static const char* const valid_modargs[] = {
|
|||
};
|
||||
|
||||
struct userdata {
|
||||
int fd;
|
||||
int fd, fd_type;
|
||||
pa_io_event *io;
|
||||
char *sink_name;
|
||||
pa_module *module;
|
||||
|
|
@ -89,7 +89,7 @@ static void io_callback(pa_mainloop_api *io, PA_GCC_UNUSED pa_io_event *e, PA_GC
|
|||
if (events & PA_IO_EVENT_INPUT) {
|
||||
struct input_event ev;
|
||||
|
||||
if (pa_loop_read(u->fd, &ev, sizeof(ev)) <= 0) {
|
||||
if (pa_loop_read(u->fd, &ev, sizeof(ev), &u->fd_type) <= 0) {
|
||||
pa_log(__FILE__": failed to read from event device: %s", pa_cstrerror(errno));
|
||||
goto fail;
|
||||
}
|
||||
|
|
@ -182,6 +182,7 @@ int pa__init(pa_core *c, pa_module*m) {
|
|||
u->io = NULL;
|
||||
u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));
|
||||
u->fd = -1;
|
||||
u->fd_type = 0;
|
||||
|
||||
if ((u->fd = open(pa_modargs_get_value(ma, "device", DEFAULT_DEVICE), O_RDONLY)) < 0) {
|
||||
pa_log(__FILE__": failed to open evdev device: %s", pa_cstrerror(errno));
|
||||
|
|
|
|||
|
|
@ -467,7 +467,7 @@ int pa__init(pa_core *c, pa_module*m) {
|
|||
*/
|
||||
if (u->source) {
|
||||
char *buf = pa_xnew(char, u->sample_size);
|
||||
read(u->fd, buf, u->sample_size);
|
||||
pa_read(u->fd, buf, u->sample_size, NULL);
|
||||
pa_xfree(buf);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue