From 9947d10a48f64d03d1d022c1c6291eb6e9f67bcf Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Thu, 18 May 1995 12:03:41 +0000 Subject: [PATCH] Bug fix in gipc_open: didn't catch EINTR. Memory leak fix in strqueue.c. --- util/gipc.c | 26 ++++++++++++++++++-------- util/strqueue.c | 8 +++++++- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/util/gipc.c b/util/gipc.c index daaa756..40ba315 100644 --- a/util/gipc.c +++ b/util/gipc.c @@ -45,7 +45,11 @@ * 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 { diff --git a/util/strqueue.c b/util/strqueue.c index 8645384..78b4fce 100644 --- a/util/strqueue.c +++ b/util/strqueue.c @@ -45,7 +45,11 @@ * 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; } -- 1.7.10.4