summaryrefslogtreecommitdiffstats
path: root/devel/libgtop2/files/patch-src::daemon::io.c
diff options
context:
space:
mode:
Diffstat (limited to 'devel/libgtop2/files/patch-src::daemon::io.c')
-rw-r--r--devel/libgtop2/files/patch-src::daemon::io.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/devel/libgtop2/files/patch-src::daemon::io.c b/devel/libgtop2/files/patch-src::daemon::io.c
new file mode 100644
index 000000000..0a11649ce
--- /dev/null
+++ b/devel/libgtop2/files/patch-src::daemon::io.c
@@ -0,0 +1,58 @@
+--- src/daemon/io.c.orig Sun Oct 19 12:54:32 2003
++++ src/daemon/io.c Mon Dec 1 13:50:25 2003
+@@ -21,6 +21,7 @@
+ Boston, MA 02111-1307, USA.
+ */
+
++#include <errno.h>
+ #include "daemon.h"
+
+ void
+@@ -35,9 +36,13 @@
+ resp->offset = offset;
+ resp->data_size = data_size;
+
++retry1:
+ if (s == 0) {
+- if (write (1, (const void *) resp, sizeof (glibtop_response)) < 0)
++ if (write (1, (const void *) resp, sizeof (glibtop_response)) < 0) {
++ if (errno == EINTR)
++ goto retry1;
+ glibtop_warn_io ("write");
++ }
+ } else {
+ if (send (s, (const void *) resp, sizeof (glibtop_response), 0) < 0)
+ glibtop_warn_io ("send");
+@@ -47,10 +52,13 @@
+ #ifdef REAL_DEBUG
+ fprintf (stderr, "Writing %d bytes of data.\n", resp->data_size);
+ #endif
+-
++retry2:
+ if (s == 0) {
+- if (write (1, data, resp->data_size) < 0)
++ if (write (1, data, resp->data_size) < 0) {
++ if (errno == EINTR)
++ goto retry2;
+ glibtop_warn_io ("write");
++ }
+ } else {
+ if (send (s, data, resp->data_size, 0) , 0)
+ glibtop_warn_io ("send");
+@@ -66,6 +74,7 @@
+ size_t already_read = 0, remaining = total_size;
+
+ while (already_read < total_size) {
++retry:
+ if (s)
+ nread = recv (s, ptr, remaining, 0);
+ else
+@@ -77,6 +86,8 @@
+ }
+
+ if (nread <= 0) {
++ if (errno == EINTR)
++ goto retry;
+ glibtop_warn_io ("recv");
+ return 0;
+ }