commit 941ab3d0f212701eab992f0390279d75425589d4
parent c437b901b8ed5a6ebbc4c46806ee215adad4373c
Author: lumidify <nobody@lumidify.org>
Date: Tue, 29 Dec 2020 14:34:44 +0100
Fix select delay on Linux; realize that microseconds are not, in fact, milliseconds
Diffstat:
M | ltkc.c | | | 9 | ++++++--- |
M | ltkd.c | | | 30 | +++++++++++++++++------------- |
2 files changed, 23 insertions(+), 16 deletions(-)
diff --git a/ltkc.c b/ltkc.c
@@ -50,9 +50,9 @@ int main(int argc, char *argv[]) {
int outfd = fileno(stdout);
struct sockaddr_un un;
fd_set rfds, wfds, rallfds, wallfds;
- struct timeval tv;
- tv.tv_sec = 0;
- tv.tv_usec = 15;
+ struct timeval tv, tv_master;
+ tv_master.tv_sec = 0;
+ tv_master.tv_usec = 20000;
char *ltk_dir = NULL, *sock_path = NULL;
int path_size;
@@ -122,7 +122,10 @@ int main(int argc, char *argv[]) {
wfds = wallfds;
/* Separate this because the writing fds are *usually* always ready,
leading to the loop looping way too fast */
+ tv = tv_master;
select(maxrfd + 1, &rfds, NULL, NULL, &tv);
+ /* value of tv doesn't really matter anymore here because the
+ necessary framerate-limiting delay is already done */
select(maxwfd + 1, NULL, &wfds, NULL, &tv);
if (FD_ISSET(sockfd, &rfds)) {
diff --git a/ltkd.c b/ltkd.c
@@ -112,19 +112,6 @@ static char *sock_path = NULL;
int main(int argc, char *argv[]) {
ltk_window *window = ltk_create_window("theme.ini", "Demo", 0, 0, 500, 500);
- return ltk_mainloop(window);
-}
-
-static int
-ltk_mainloop(ltk_window *window) {
- XEvent event;
- fd_set rfds, wfds, rallfds, wallfds;
- int maxfd;
- int rretval, wretval;
- int clifd;
- struct timeval tv;
- tv.tv_sec = 0;
- tv.tv_usec = 10;
ltk_dir = ltk_setup_directory();
if (!ltk_dir) ltk_fatal("Unable to setup ltk directory.\n");
@@ -142,6 +129,20 @@ ltk_mainloop(ltk_window *window) {
sockets[i].tokens.tokens = NULL;
}
+ return ltk_mainloop(window);
+}
+
+static int
+ltk_mainloop(ltk_window *window) {
+ XEvent event;
+ fd_set rfds, wfds, rallfds, wallfds;
+ int maxfd;
+ int rretval, wretval;
+ int clifd;
+ struct timeval tv, tv_master;
+ tv_master.tv_sec = 0;
+ tv_master.tv_usec = 10;
+
FD_ZERO(&rallfds);
FD_ZERO(&wallfds);
@@ -159,7 +160,10 @@ ltk_mainloop(ltk_window *window) {
wfds = wallfds;
/* separate these because the writing fds are usually
always ready for writing */
+ tv = tv_master;
rretval = select(maxfd + 1, &rfds, NULL, NULL, &tv);
+ /* value of tv doesn't really matter anymore here because the
+ necessary framerate-limiting delay is already done */
wretval = select(maxfd + 1, NULL, &wfds, NULL, &tv);
while (XPending(window->dpy)) {
XNextEvent(window->dpy, &event);