~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to mysys/my_file.cc

  • Committer: Stewart Smith
  • Date: 2009-05-12 05:56:00 UTC
  • mfrom: (1008 drizzle)
  • mto: (1014.2.2 mordred)
  • mto: This revision was merged to the branch mainline in revision 1015.
  • Revision ID: stewart@flamingspork.com-20090512055600-4gg3jgx2bqt9wn5f
merge

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
   along with this program; if not, write to the Free Software
14
14
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
15
15
 
16
 
#include "mysys_priv.h"
 
16
#include "mysys/mysys_priv.h"
17
17
#include "my_static.h"
18
18
#include <mystrings/m_string.h>
19
19
#include <stdlib.h>
37
37
#if defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE)
38
38
 
39
39
#ifndef RLIM_INFINITY
40
 
#define RLIM_INFINITY ((uint32_t) 0xffffffff)
 
40
#define RLIM_INFINITY ((rlim_t) 0xffffffff)
41
41
#endif
42
42
 
43
43
static uint64_t set_max_open_files(uint64_t max_file_limit)
44
44
{
45
 
  struct rlimit rlimit;
 
45
  struct rlimit rlim;
46
46
  rlim_t old_cur;
47
47
 
48
 
  if (!getrlimit(RLIMIT_NOFILE,&rlimit))
 
48
  if (!getrlimit(RLIMIT_NOFILE,&rlim))
49
49
  {
50
 
    old_cur= rlimit.rlim_cur;
51
 
    if (rlimit.rlim_cur == RLIM_INFINITY)
52
 
      rlimit.rlim_cur = max_file_limit;
53
 
    if (rlimit.rlim_cur >= max_file_limit)
 
50
    old_cur= rlim.rlim_cur;
 
51
    if (rlim.rlim_cur == (rlim_t)RLIM_INFINITY)
 
52
      rlim.rlim_cur = max_file_limit;
 
53
    if (rlim.rlim_cur >= max_file_limit)
54
54
    {
55
 
      if (rlimit.rlim_cur > UINT32_MAX)
56
 
        return UINT32_MAX;
57
 
      else
58
 
        return((uint32_t)rlimit.rlim_cur);
 
55
      return rlim.rlim_cur;
59
56
    }
60
 
    rlimit.rlim_cur= rlimit.rlim_max= max_file_limit;
61
 
    if (setrlimit(RLIMIT_NOFILE, &rlimit))
 
57
    rlim.rlim_cur= rlim.rlim_max= max_file_limit;
 
58
    if (setrlimit(RLIMIT_NOFILE, &rlim))
62
59
      max_file_limit= (old_cur < UINT32_MAX) ? (uint32_t)old_cur : UINT32_MAX;
63
60
    else
64
61
    {
65
 
      rlimit.rlim_cur= 0;                       /* Safety if next call fails */
66
 
      (void) getrlimit(RLIMIT_NOFILE,&rlimit);
67
 
      if (rlimit.rlim_cur)                      /* If call didn't fail */
68
 
        max_file_limit= (uint32_t) rlimit.rlim_cur;
 
62
      rlim.rlim_cur= 0;                 /* Safety if next call fails */
 
63
      (void) getrlimit(RLIMIT_NOFILE,&rlim);
 
64
      if (rlim.rlim_cur)                        /* If call didn't fail */
 
65
        max_file_limit= (uint32_t) rlim.rlim_cur;
69
66
    }
70
67
  }
71
68
  return(max_file_limit);