~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to mysys/my_file.cc

  • Committer: Brian Aker
  • Date: 2009-04-16 20:12:59 UTC
  • mfrom: (992.1.20 mordred)
  • Revision ID: brian@gaz-20090416201259-2x3czxb5hsdisr6h
Merge Monty.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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);