aboutsummaryrefslogtreecommitdiff
path: root/devel/libgtop/files/patch-src::daemon::io.c
diff options
context:
space:
mode:
Diffstat (limited to 'devel/libgtop/files/patch-src::daemon::io.c')
-rw-r--r--devel/libgtop/files/patch-src::daemon::io.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/devel/libgtop/files/patch-src::daemon::io.c b/devel/libgtop/files/patch-src::daemon::io.c
new file mode 100644
index 000000000000..f8fb71b0378b
--- /dev/null
+++ b/devel/libgtop/files/patch-src::daemon::io.c
@@ -0,0 +1,57 @@
+--- src/daemon/io.c.orig Mon Dec 12 05:09:38 2005
++++ src/daemon/io.c Wed Dec 14 18:58:01 2005
+@@ -21,6 +21,7 @@
+ Boston, MA 02111-1307, USA.
+ */
+
++#include <errno.h>
+ #include <config.h>
+ #include "daemon.h"
+ #include <glibtop/error.h>
+@@ -37,9 +38,13 @@ do_output (int s, glibtop_response *resp
+ 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");
+@@ -50,9 +55,13 @@ do_output (int s, glibtop_response *resp
+ 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");
+@@ -68,6 +77,7 @@ do_read (int s, void *ptr, size_t total_
+ size_t already_read = 0, remaining = total_size;
+
+ while (already_read < total_size) {
++retry:
+ if (s)
+ nread = recv (s, ptr, remaining, 0);
+ else
+@@ -79,6 +89,8 @@ do_read (int s, void *ptr, size_t total_
+ }
+
+ if (nread <= 0) {
++ if (errno == EINTR)
++ goto retry;
+ glibtop_warn_io ("recv");
+ return 0;
+ }