Bug fix in gipc_open: didn't catch EINTR.
authorAdam Dickmeiss <adam@indexdata.dk>
Thu, 18 May 1995 12:03:41 +0000 (12:03 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Thu, 18 May 1995 12:03:41 +0000 (12:03 +0000)
Memory leak fix in strqueue.c.

util/gipc.c
util/strqueue.c

index daaa756..40ba315 100644 (file)
  * Europagate, 1995
  *
  * $Log: gipc.c,v $
- * Revision 1.8  1995/05/17 10:51:43  adam
+ * 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
@@ -98,18 +102,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
     {
index 8645384..78b4fce 100644 (file)
  * Europagate, 1995
  *
  * $Log: strqueue.c,v $
- * Revision 1.2  1995/05/16 09:40:55  adam
+ * Revision 1.3  1995/05/18 12:03:41  adam
+ * Bug fix in gipc_open: didn't catch EINTR.
+ * Memory leak fix in strqueue.c.
+ *
+ * Revision 1.2  1995/05/16  09:40:55  adam
  * LICENSE.
  *
  * Revision 1.1  1995/03/28  11:42:41  adam
@@ -79,6 +83,8 @@ struct str_queue *str_queue_mk (void)
 
 void str_queue_rm (struct str_queue **sq)
 {
+    while (str_queue_deq (*sq, NULL, 0))
+        ;
     free (*sq);
     *sq = NULL;
 }