Minor changes.
[egate.git] / util / gipc.c
index daaa756..6881109 100644 (file)
  * Europagate, 1995
  *
  * $Log: gipc.c,v $
- * Revision 1.8  1995/05/17 10:51:43  adam
+ * Revision 1.10  1995/05/22 11:43:01  adam
+ * Minor changes on dtbsun - include of errno.h.
+ *
+ * Revision 1.9  1995/05/18  12:03:41  adam
+ * Bug fix in gipc_open: didn't catch EINTR.
+ * Memory leak fix in strqueue.c.
+ *
+ * Revision 1.8  1995/05/17  10:51:43  adam
  * Bug fix.
  *
  * Revision 1.7  1995/05/16  09:40:52  adam
@@ -79,6 +86,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <fcntl.h>
+#include <errno.h>
 
 #include <gw-log.h>
 #include <gip.h>
@@ -98,18 +106,24 @@ int gipc_open (GIP gip, const char *server, int sync)
     if (sync) 
     {
         gw_log (GW_LOG_DEBUG, "gipc", "Open sync writeonly of %s", server);
-       gip->wfd = open (server, O_WRONLY);
-        gw_log (GW_LOG_DEBUG, "gipc", "got wfd %d", gip->wfd);
-
-        if (gip->wfd == -1)
+        while (1)
         {
+            gip->wfd = open (server, O_WRONLY);
+            gw_log (GW_LOG_DEBUG, "gipc", "got wfd %d", gip->wfd);
+            
+            if (gip->wfd != -1)
+                break;
             gw_log (GW_LOG_DEBUG|GW_LOG_ERRNO, "gipc", "Cannot open %s",
                     server);
-            return -2;
+            if (errno != EINTR)
+                return -2;
         }
         gw_log (GW_LOG_DEBUG, "gipc", "Open sync readonly of %s", gip->name);
-        gip->rfd = open (gip->name, O_RDONLY);
-        gw_log (GW_LOG_DEBUG, "gipc", "got rfd %d", gip->rfd);
+        do
+        {
+            gip->rfd = open (gip->name, O_RDONLY);
+            gw_log (GW_LOG_DEBUG, "gipc", "got rfd %d", gip->rfd);
+        } while (gip->rfd == -1 && errno == EINTR);
     }
     else
     {