X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Fgipc.c;h=68811095df12d4abc5dc34c845f41ee355de438e;hb=cf6ead410b63297e714d9258f9ea593b1e127501;hp=daaa7569186637655b99704cc917d395e8f96343;hpb=6d44f69925b304aed150a18a557c8d853aaf8aa2;p=egate.git diff --git a/util/gipc.c b/util/gipc.c index daaa756..6881109 100644 --- a/util/gipc.c +++ b/util/gipc.c @@ -45,7 +45,14 @@ * 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 #include #include +#include #include #include @@ -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 {