From 3391520266f6eb1824894dbffadc1dcf95b4f803 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 25 Dec 2005 15:30:29 +0000 Subject: [PATCH] *** empty log message *** --- Changes | 2 ++ src/rxvtdaemon.C | 21 ++++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/Changes b/Changes index bc4416f3..fbca761d 100644 --- a/Changes +++ b/Changes @@ -10,6 +10,8 @@ WISH: meta-tagging of data by regex/master process (my dream project) WISH: OnTheSpot editing, or maybe switch to miiiiiiif WISH: just for fun, do shade and tint with XRender. + - workaround for possible linux-kernel bug, details pending. + 6.0 Sat Dec 24 13:58:56 CET 2005 - make it compile without SMART_RESIZE again. - enable slow link support by default. diff --git a/src/rxvtdaemon.C b/src/rxvtdaemon.C index 27cdeceb..a7c5dd11 100644 --- a/src/rxvtdaemon.C +++ b/src/rxvtdaemon.C @@ -26,11 +26,26 @@ #include #include +#include +#include #include #include #include "rxvtdaemon.h" +// works around linux kernel bug, returns EAGAIN on a blocking socket +static ssize_t +read_ (int fd, void *buf, size_t count) +{ + int ret; + + do + ret = read (fd, buf, count); + while (ret < 0 && errno == EAGAIN); + + return ret; +} + char *rxvt_connection::unix_sockname () { char name[PATH_MAX]; @@ -72,7 +87,7 @@ bool rxvt_connection::recv (auto_str &data, int *len) uint8_t s[2]; int l; - if (read (fd, s, 2) != 2) + if (read_ (fd, s, 2) != 2) return false; l = (s[0] << 8) + s[1]; @@ -87,7 +102,7 @@ bool rxvt_connection::recv (auto_str &data, int *len) if (!data) return false; - if (read (fd, data, l) != l) + if (read_ (fd, data, l) != l) return false; data[l] = 0; @@ -108,7 +123,7 @@ bool rxvt_connection::recv (int &data) { uint8_t s[4]; - if (read (fd, s, 4) != 4) + if (read_ (fd, s, 4) != 4) return false; data = (((((s[0] << 8) | s[1]) << 8) | s[2]) << 8) | s[3]; -- 2.34.1