* 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
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
+#include <errno.h>
#include <gw-log.h>
#include <gip.h>
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
{
}
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);
}
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;