main_notify: make the read side of the pipe blocking

Currently, both sides of the pipe are blocking, although we do not
need blocking read().  Convert it back to blocking.  Eliminate the
select() from wait_main_task().
This commit is contained in:
Max Kellermann 2008-12-30 19:20:36 +01:00
parent 10b5966bf6
commit 03e650aa9e
3 changed files with 6 additions and 27 deletions

View File

@ -63,7 +63,12 @@ static int ioops_consume(int fd_count, fd_set * rfds,
void init_main_notify(void)
{
main_task = g_thread_self();
init_async_pipe(main_pipe);
if (pipe(main_pipe) < 0)
g_error("Couldn't open pipe: %s", strerror(errno));
if (set_nonblocking(main_pipe[1]) < 0)
g_error("Couldn't set non-blocking I/O: %s", strerror(errno));
main_notify_IO.fdset = ioops_fdset;
main_notify_IO.consume = ioops_consume;
registerIO(&main_notify_IO);
@ -96,19 +101,5 @@ void main_notify_unlock(void)
void wait_main_task(void)
{
fd_set rfds;
int ret;
assert(main_task == g_thread_self());
do {
FD_ZERO(&rfds);
FD_SET(main_pipe[0], &rfds);
ret = select(main_pipe[0] + 1, &rfds, NULL, NULL, NULL);
} while (ret == 0 || (ret < 0 && (errno == EAGAIN || errno == EINTR)));
if (ret < 0)
g_error("select() failed: %s", strerror(errno));
consume_pipe();
}

View File

@ -211,16 +211,6 @@ int set_nonblocking(int fd)
#endif
}
void init_async_pipe(int file_des[2])
{
if (pipe(file_des) < 0)
g_error("Couldn't open pipe: %s", strerror(errno));
if (set_nonblocking(file_des[0]) < 0)
g_error("Couldn't set non-blocking I/O: %s", strerror(errno));
if (set_nonblocking(file_des[1]) < 0)
g_error("Couldn't set non-blocking I/O: %s", strerror(errno));
}
int stringFoundInStringArray(const char *const*array, const char *suffix)
{
while (array && *array) {

View File

@ -95,8 +95,6 @@ char *parsePath(char *path);
int set_nonblocking(int fd);
void init_async_pipe(int file_des[2]);
int stringFoundInStringArray(const char *const*array, const char *suffix);
#endif