[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[patch 2.1.0p1] cfservd: improved handling of EINTR from select()
From: |
Sergio . Gelato |
Subject: |
[patch 2.1.0p1] cfservd: improved handling of EINTR from select() |
Date: |
Sat, 13 Dec 2003 18:56:36 +0100 |
User-agent: |
Mutt/1.3.28i |
The following patch to cfengine 2.1.0p1's cfservd.c corrects problems that
may be triggered when the select() system call is interrupted. Whenever
select() returns -1, the fd_set arguments become undefined.
Also, it's best not to proceed to the accept() call in such
circumstances since there is no guarantee that the descriptor is ready.
--- orig/src/cfservd.c
+++ mod/src/cfservd.c
@@ -601,8 +601,6 @@
}
ageing = 0;
-FD_ZERO(&rset);
-FD_SET(sd,&rset);
/* Andrew Stribblehill <address@hidden> -- close sd on exec */
fcntl(sd, F_SETFD, FD_CLOEXEC);
@@ -614,10 +612,19 @@
CheckFileChanges(argc,argv,sd);
}
- if ((select((sd+1),&rset,NULL,NULL,NULL) == -1) && (errno != EINTR))
+ FD_ZERO(&rset);
+ FD_SET(sd,&rset);
+ if (select((sd+1),&rset,NULL,NULL,NULL) == -1)
{
- CfLog(cferror, "select failed", "select");
- exit(1);
+ if (errno == EINTR)
+ {
+ continue;
+ }
+ else
+ {
+ CfLog(cferror, "select failed", "select");
+ exit(1);
+ }
}
if ((sd_reply = accept(sd,(struct sockaddr *)&cin,&addrlen)) != -1)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [patch 2.1.0p1] cfservd: improved handling of EINTR from select(),
Sergio . Gelato <=