1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

ui: Ignore EINTR in inp_readline()

EINTR is usual situation during resizing of terminal window.
This commit is contained in:
Dmitry Podgorny 2015-06-23 22:29:01 +00:00
parent fed55b5459
commit f24019ee4d

View File

@ -71,6 +71,7 @@ static WINDOW *inp_win;
static int pad_start = 0;
static struct timeval p_rl_timeout;
/* Timeout in ms. Shows how long select() may block. */
static gint inp_timeout = 0;
static gint no_input_count = 0;
@ -115,14 +116,6 @@ create_input_window(void)
#else
ESCDELAY = 25;
#endif
if (inp_timeout == 1000) {
p_rl_timeout.tv_sec = 1;
p_rl_timeout.tv_usec = 0;
} else {
p_rl_timeout.tv_sec = 0;
p_rl_timeout.tv_usec = inp_timeout * 1000;
}
rl_readline_name = "profanity";
rl_getc_function = _inp_rl_getc;
rl_startup_hook = _inp_rl_startup_hook;
@ -141,13 +134,17 @@ inp_readline(void)
{
free(inp_line);
inp_line = NULL;
p_rl_timeout.tv_sec = inp_timeout / 1000;
p_rl_timeout.tv_usec = inp_timeout % 1000 * 1000;
FD_ZERO(&fds);
FD_SET(fileno(rl_instream), &fds);
errno = 0;
r = select(FD_SETSIZE, &fds, NULL, NULL, &p_rl_timeout);
if (r < 0) {
char *err_msg = strerror(errno);
log_error("Readline failed: %s", err_msg);
if (errno != EINTR) {
char *err_msg = strerror(errno);
log_error("Readline failed: %s", err_msg);
}
return NULL;
}
@ -169,14 +166,6 @@ inp_readline(void)
prof_handle_idle();
}
if (inp_timeout == 1000) {
p_rl_timeout.tv_sec = 1;
p_rl_timeout.tv_usec = 0;
} else {
p_rl_timeout.tv_sec = 0;
p_rl_timeout.tv_usec = inp_timeout * 1000;
}
if (inp_line) {
return strdup(inp_line);
} else {