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:
parent
10b5966bf6
commit
03e650aa9e
@ -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();
|
||||
}
|
||||
|
10
src/utils.c
10
src/utils.c
@ -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) {
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user