X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;f=util%2Fgipc.c;h=68811095df12d4abc5dc34c845f41ee355de438e;hb=4318ca87e2ae9ad83203dc72b154b9b23b49e0b3;hp=2cd508e10ed8f9e7069c635a1773e9f2388ea04d;hpb=e1ec9d39463f431383547891f38e30f2ff17842c;p=egate.git diff --git a/util/gipc.c b/util/gipc.c index 2cd508e..6881109 100644 --- a/util/gipc.c +++ b/util/gipc.c @@ -45,7 +45,17 @@ * Europagate, 1995 * * $Log: gipc.c,v $ - * Revision 1.7 1995/05/16 09:40:52 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 * LICENSE. * * Revision 1.6 1995/05/01 16:27:29 adam @@ -76,6 +86,7 @@ #include #include #include +#include #include #include @@ -95,12 +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); - + 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); + 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 { @@ -114,7 +137,8 @@ int gipc_open (GIP gip, const char *server, int sync) } if (gip->rfd == -1) { - gw_log (GW_LOG_DEBUG, "gipc", "Cannot open %s", gip->name); + gw_log (GW_LOG_DEBUG|GW_LOG_ERRNO, "gipc", "Cannot open %s", + gip->name); if (gip->wfd != -1) { close (gip->wfd); @@ -124,7 +148,7 @@ int gipc_open (GIP gip, const char *server, int sync) } if (gip->wfd == -1) { - gw_log (GW_LOG_DEBUG, "gipc", "Cannot open %s", server); + gw_log (GW_LOG_DEBUG|GW_LOG_ERRNO, "gipc", "Cannot open %s", server); close (gip->rfd); gip->rfd = -1; return -2;