Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "ink_sys_control.h"
00025 #include "ink_platform.h"
00026 #include "ink_assert.h"
00027
00028 rlim_t
00029 ink_max_out_rlimit(int which, bool max_it, bool unlim_it)
00030 {
00031 struct rlimit rl;
00032
00033 #if defined(linux)
00034 # define MAGIC_CAST(x) (enum __rlimit_resource)(x)
00035 #else
00036 # define MAGIC_CAST(x) x
00037 #endif
00038
00039 if (max_it) {
00040 ink_release_assert(getrlimit(MAGIC_CAST(which), &rl) >= 0);
00041 if (rl.rlim_cur != rl.rlim_max) {
00042 #if defined(darwin)
00043 if (which == RLIMIT_NOFILE)
00044 rl.rlim_cur = fmin(OPEN_MAX, rl.rlim_max);
00045 else
00046 rl.rlim_cur = rl.rlim_max;
00047 #else
00048 rl.rlim_cur = rl.rlim_max;
00049 #endif
00050 ink_release_assert(setrlimit(MAGIC_CAST(which), &rl) >= 0);
00051 }
00052 }
00053
00054 #if !defined(darwin)
00055 if (unlim_it) {
00056 ink_release_assert(getrlimit(MAGIC_CAST(which), &rl) >= 0);
00057 if (rl.rlim_cur != (rlim_t)RLIM_INFINITY) {
00058 rl.rlim_cur = (rl.rlim_max = RLIM_INFINITY);
00059 ink_release_assert(setrlimit(MAGIC_CAST(which), &rl) >= 0);
00060 }
00061 }
00062 #endif
00063 ink_release_assert(getrlimit(MAGIC_CAST(which), &rl) >= 0);
00064 return rl.rlim_cur;
00065 }