commit 85849ce72aa4e9cee307a031b97777e9eba2d453
parent 15cc8754c2e272ebac6e86845859816e881da000
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Sun, 16 Sep 2012 10:47:21 +0200
Remove timeout in the main loop
The main loop waits until there is some data to read in file descriptors of
the X server or the pseudo tty. But it uses a timeout in select(), which
causes that st awake each 20 ms, even it doesn't have something to do. This
pull request removes this problem removing the timeout, which is not needed.
---
TODO | 1 -
st.c | 27 +++------------------------
2 files changed, 3 insertions(+), 25 deletions(-)
Diffstat:
| M | TODO | | | 1 | - |
| M | st.c | | | 27 | +++------------------------ |
2 files changed, 3 insertions(+), 25 deletions(-)
diff --dropbox a/TODO b/TODO
@@ -15,7 +15,6 @@ code & interface
* clean selection code
* clean and complete terminfo entry
-* remove the timeouts in the main loop
bugs
----
diff --dropbox a/st.c b/st.c
@@ -53,8 +53,6 @@
#define XK_NO_MOD UINT_MAX
#define XK_ANY_MOD 0
-#define SELECT_TIMEOUT (20*1000) /* 20 ms */
-#define DRAW_TIMEOUT (20*1000) /* 20 ms */
#define REDRAW_TIMEOUT (80*1000) /* 80 ms */
#define SERRNO strerror(errno)
@@ -205,7 +203,6 @@ typedef struct {
int ch; /* char height */
int cw; /* char width */
char state; /* focus, redraw, visible */
- struct timeval lastdraw;
} XWindow;
typedef struct {
@@ -250,7 +247,6 @@ static void drawregion(int, int, int, int);
static void execsh(void);
static void sigchld(int);
static void run(void);
-static bool last_draw_too_old(void);
static void csidump(void);
static void csihandle(void);
@@ -2158,7 +2154,6 @@ void
draw() {
drawregion(0, 0, term.col, term.row);
xcopy();
- gettimeofday(&xw.lastdraw, NULL);
}
void
@@ -2345,41 +2340,25 @@ resize(XEvent *e) {
ttyresize(col, row);
}
-bool
-last_draw_too_old(void) {
- struct timeval now;
- gettimeofday(&now, NULL);
- return TIMEDIFF(now, xw.lastdraw) >= DRAW_TIMEOUT/1000;
-}
-
void
run(void) {
XEvent ev;
fd_set rfd;
int xfd = XConnectionNumber(xw.dpy);
- struct timeval timeout = {0};
- bool stuff_to_print = 0;
for(;;) {
FD_ZERO(&rfd);
FD_SET(cmdfd, &rfd);
FD_SET(xfd, &rfd);
- timeout.tv_sec = 0;
- timeout.tv_usec = SELECT_TIMEOUT;
- if(select(MAX(xfd, cmdfd)+1, &rfd, NULL, NULL, &timeout) < 0) {
+ if(select(MAX(xfd, cmdfd)+1, &rfd, NULL, NULL, NULL) < 0) {
if(errno == EINTR)
continue;
die("select failed: %s\n", SERRNO);
}
- if(FD_ISSET(cmdfd, &rfd)) {
+ if(FD_ISSET(cmdfd, &rfd))
ttyread();
- stuff_to_print = 1;
- }
- if(stuff_to_print && last_draw_too_old()) {
- stuff_to_print = 0;
- draw();
- }
+ draw();
while(XPending(xw.dpy)) {
XNextEvent(xw.dpy, &ev);