summaryrefslogtreecommitdiffstats
path: root/gss-misc.c
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2009-11-17 09:10:24 +0100
committerRainer Gerhards <rgerhards@adiscon.com>2009-11-17 09:10:24 +0100
commitf94a3034b6c2218f51be5ab84bae591269e07215 (patch)
tree687ef09644b4c315790becfff8088a05b1d9896e /gss-misc.c
parent4af3a1d72d658a83b6b891ef37b0cd0471ba0e15 (diff)
parent30c2e42ec305bb97bd04172e5c02b89eeea53e35 (diff)
downloadrsyslog-f94a3034b6c2218f51be5ab84bae591269e07215.tar.gz
rsyslog-f94a3034b6c2218f51be5ab84bae591269e07215.tar.xz
rsyslog-f94a3034b6c2218f51be5ab84bae591269e07215.zip
integrating varmojfekoj's "unlimited select()" patch into v4-devel
Diffstat (limited to 'gss-misc.c')
-rw-r--r--gss-misc.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/gss-misc.c b/gss-misc.c
index c9220595..2bfaf9c5 100644
--- a/gss-misc.c
+++ b/gss-misc.c
@@ -51,11 +51,14 @@
#include "obj.h"
#include "errmsg.h"
#include "gss-misc.h"
+#include "glbl.h"
+#include "unlimited_select.h"
MODULE_TYPE_LIB
/* static data */
DEFobjStaticHelpers
+DEFobjCurrIf(glbl)
DEFobjCurrIf(errmsg)
static void display_status_(char *m, OM_uint32 code, int type)
@@ -108,28 +111,38 @@ static int read_all(int fd, char *buf, unsigned int nbyte)
{
int ret;
char *ptr;
- fd_set rfds;
struct timeval tv;
+#ifdef USE_UNLIMITED_SELECT
+ fd_set *pRfds = malloc(glbl.GetFdSetSize());
+#else
+ fd_set rfds;
+ fd_set *pRfds = &rfds;
+#endif
for (ptr = buf; nbyte; ptr += ret, nbyte -= ret) {
- FD_ZERO(&rfds);
- FD_SET(fd, &rfds);
+ FD_ZERO(pRfds);
+ FD_SET(fd, pRfds);
tv.tv_sec = 1;
tv.tv_usec = 0;
- if ((ret = select(FD_SETSIZE, &rfds, NULL, NULL, &tv)) <= 0
- || !FD_ISSET(fd, &rfds))
+ if ((ret = select(FD_SETSIZE, pRfds, NULL, NULL, &tv)) <= 0
+ || !FD_ISSET(fd, pRfds)) {
+ freeFdSet(pRfds);
return ret;
+ }
ret = recv(fd, ptr, nbyte, 0);
if (ret < 0) {
if (errno == EINTR)
continue;
+ freeFdSet(pRfds);
return (ret);
} else if (ret == 0) {
+ freeFdSet(pRfds);
return (ptr - buf);
}
}
+ freeFdSet(pRfds);
return (ptr - buf);
}