Skip to content

Commit

Permalink
[Server] Avoid resetting hard limit should we be running as root.
Browse files Browse the repository at this point in the history
  • Loading branch information
abh3 committed Jul 5, 2016
1 parent 881c023 commit 0762b03
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 30 deletions.
4 changes: 2 additions & 2 deletions src/Xrd/XrdConfig.cc
Expand Up @@ -847,8 +847,8 @@ int XrdConfig::setFDL()

// Set the limit to the maximum allowed
//
if (rlim.rlim_max == RLIM_INFINITY) rlim.rlim_max = maxFD;
rlim.rlim_cur = rlim.rlim_max;
if (rlim.rlim_max == RLIM_INFINITY) rlim.rlim_cur = maxFD;
else rlim.rlim_cur = rlim.rlim_max;
#if (defined(__APPLE__) && defined(MAC_OS_X_VERSION_10_5))
if (rlim.rlim_cur > OPEN_MAX) rlim.rlim_max = rlim.rlim_cur = OPEN_MAX;
#endif
Expand Down
9 changes: 6 additions & 3 deletions src/Xrd/XrdScheduler.cc
Expand Up @@ -141,10 +141,13 @@ XrdScheduler::XrdScheduler(XrdSysError *eP, XrdOucTrace *tP,
//
if (!getrlimit(RLIMIT_NPROC, &rlim))
{if (rlim.rlim_max == RLIM_INFINITY || rlim.rlim_max > theMax)
rlim.rlim_max = theMax;
if (rlim.rlim_cur != rlim.rlim_max)
{rlim.rlim_cur = rlim.rlim_max;
{rlim.rlim_cur = theMax;
setrlimit(RLIMIT_NPROC, &rlim);
} else {
if (rlim.rlim_cur != rlim.rlim_max)
{rlim.rlim_cur = rlim.rlim_max;
setrlimit(RLIMIT_NPROC, &rlim);
}
}
}

Expand Down
32 changes: 17 additions & 15 deletions src/XrdOss/XrdOssConfig.cc
Expand Up @@ -241,6 +241,7 @@ int XrdOssSys::Configure(const char *configfn, XrdSysError &Eroute,
char *val;
int retc, NoGo = XrdOssOK;
pthread_t tid;
bool setfd = false;

// Do the herald thing
//
Expand All @@ -255,16 +256,27 @@ int XrdOssSys::Configure(const char *configfn, XrdSysError &Eroute,
// Establish the FD limit and the fence (half way)
//
if (getrlimit(RLIMIT_NOFILE, &rlim))
Eroute.Emsg("Config", errno, "get fd limit");
else {if (rlim.rlim_max == RLIM_INFINITY) rlim.rlim_max = maxFD;
if (rlim.rlim_cur != rlim.rlim_max)
{rlim.rlim_cur = rlim.rlim_max;
if (setrlimit(RLIMIT_NOFILE, &rlim))
{Eroute.Emsg("Config", errno, "get fd limit");
rlim.rlim_cur = maxFD;
}
else {if (rlim.rlim_max == RLIM_INFINITY)
{rlim.rlim_cur = maxFD;
setfd = true;
} else {
if (rlim.rlim_cur != rlim.rlim_max)
{rlim.rlim_cur = rlim.rlim_max;
setfd = true;
}
}
if (setfd)
{if (setrlimit(RLIMIT_NOFILE, &rlim))
Eroute.Emsg("Config", errno, "set fd limit");
else FDLimit = rlim.rlim_cur;
} else {FDFence = static_cast<int>(rlim.rlim_cur)>>1;
FDLimit = rlim.rlim_cur;
}
}
if (FDFence < 0 || FDFence >= FDLimit) FDFence = FDLimit >> 1;

// Process the configuration file
//
Expand All @@ -277,16 +289,6 @@ int XrdOssSys::Configure(const char *configfn, XrdSysError &Eroute,
if (STT_Lib && !NoGo) NoGo |= ConfigStatLib(Eroute, envP);
}

// Establish the FD limit
//
if (FDLimit <= 0) FDLimit = rlim.rlim_cur;
else {rlim.rlim_cur = FDLimit;
if (setrlimit(RLIMIT_NOFILE, &rlim) < 0)
NoGo = Eroute.Emsg("Config", errno,"set FD limit");
}
if (FDFence < 0 || FDFence >= FDLimit) FDFence = FDLimit >> 1;
}

// Establish usage tracking and quotas, if need be. Note that if we are not
// a true data server, those services will be initialized but then disabled.
//
Expand Down
22 changes: 12 additions & 10 deletions src/XrdPosix/XrdPosixObject.cc
Expand Up @@ -206,16 +206,18 @@ int XrdPosixObject::Init(int fdnum)

// Obtain the file descriptor limit but be careful of infinity
//
if (getrlimit(RLIMIT_NOFILE, &rlim)
|| rlim.rlim_max == RLIM_INFINITY || (int)rlim.rlim_max > maxFD)
{rlim.rlim_cur = 0; rlim.rlim_max = maxFD;}

limfd = static_cast<int>(rlim.rlim_max);

if (rlim.rlim_cur != rlim.rlim_max)
{rlim.rlim_cur = rlim.rlim_max;
setrlimit(RLIMIT_NOFILE, &rlim);
}
if (getrlimit(RLIMIT_NOFILE, &rlim)) limfd = maxFD;
else {if (rlim.rlim_max == RLIM_INFINITY || (int)rlim.rlim_max > maxFD)
{rlim.rlim_cur = maxFD;
setrlimit(RLIMIT_NOFILE, &rlim);
} else {
if (rlim.rlim_cur != rlim.rlim_max)
{rlim.rlim_cur = rlim.rlim_max;
setrlimit(RLIMIT_NOFILE, &rlim);
}
}
limfd = static_cast<int>(rlim.rlim_cur);
}

// Compute size of table. if the passed fdnum is negative then the caller does
// not want us to shadow fd's (ther caller promises to be honest). Otherwise,
Expand Down

0 comments on commit 0762b03

Please sign in to comment.