ben 96/07/27 06:25:06
Modified: src http_core.c
Log:
Makes setrlimit stuff burn less memory, and also tidies it up some more.
Revision Changes Path
1.22 +23 -19 apache/src/http_core.c
Index: http_core.c
===================================================================
RCS file: /export/home/cvs/apache/src/http_core.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -C3 -r1.21 -r1.22
*** http_core.c 1996/07/27 13:08:29 1.21
--- http_core.c 1996/07/27 13:25:05 1.22
***************
*** 95,118 ****
conf->do_rfc1413 = DEFAULT_RFC1413 | 2; /* set bit 1 to indicate
default */
#ifdef RLIMIT_CPU
! conf->limit_cpu = (struct rlimit *) pcalloc (a, sizeof (struct rlimit));
! if ((getrlimit(RLIMIT_CPU, conf->limit_cpu)) != 0)
! conf->limit_cpu = NULL;
#endif
! #ifdef RLIMIT_DATA
! conf->limit_mem = (struct rlimit *) pcalloc (a, sizeof (struct rlimit));
! if ((getrlimit(RLIMIT_DATA, conf->limit_mem)) != 0)
! conf->limit_mem = NULL;
! #endif
! #ifdef RLIMIT_VMEM
! conf->limit_mem = (struct rlimit *) pcalloc (a, sizeof (struct rlimit));
! if ((getrlimit(RLIMIT_VMEM, conf->limit_mem)) != 0)
! conf->limit_mem = NULL;
#endif
#ifdef RLIMIT_NPROC
! conf->limit_nproc = (struct rlimit *) pcalloc (a, sizeof (struct
rlimit));
! if ((getrlimit(RLIMIT_NPROC, conf->limit_nproc)) != 0)
! conf->limit_nproc = NULL;
#endif
conf->sec = make_array (a, 2, sizeof(void *));
--- 95,107 ----
conf->do_rfc1413 = DEFAULT_RFC1413 | 2; /* set bit 1 to indicate
default */
#ifdef RLIMIT_CPU
! conf->limit_cpu = NULL;
#endif
! #if defined(RLIMIT_DATA) || defined(RLIMIT_VMEM)
! conf->limit_mem = NULL;
#endif
#ifdef RLIMIT_NPROC
! conf->limit_nproc = NULL;
#endif
conf->sec = make_array (a, 2, sizeof(void *));
***************
*** 839,851 ****
return NULL;
}
! static void set_rlimit(cmd_parms *cmd, struct rlimit *limit, char *arg)
{
char *str;
/* If your platform doesn't define rlim_t then typedef it in conf.h */
rlim_t cur = 0;
rlim_t max = 0;
if ((str = getword_conf(cmd->pool, &arg)))
if (!strcasecmp(str, "max"))
cur = limit->rlim_max;
--- 828,851 ----
return NULL;
}
! static void set_rlimit(cmd_parms *cmd, struct rlimit **plimit, char *arg,
! int type)
{
char *str;
+ struct rlimit *limit;
/* If your platform doesn't define rlim_t then typedef it in conf.h */
rlim_t cur = 0;
rlim_t max = 0;
+ *plimit=(struct rlimit *)pcalloc(cmd->pool,sizeof **plimit);
+ limit=*plimit;
+ if ((getrlimit(type, limit)) != 0)
+ {
+ *plimit = NULL;
+ log_unixerr("getrlimit",cmd->cmd->name,"failed",cmd->server);
+ return;
+ }
+
if ((str = getword_conf(cmd->pool, &arg)))
if (!strcasecmp(str, "max"))
cur = limit->rlim_max;
***************
*** 884,890 ****
#ifdef RLIMIT_CPU
char *set_limit_cpu (cmd_parms *cmd, core_dir_config *conf, char *arg)
{
! set_rlimit(cmd,conf->limit_cpu,arg);
return NULL;
}
#endif
--- 884,890 ----
#ifdef RLIMIT_CPU
char *set_limit_cpu (cmd_parms *cmd, core_dir_config *conf, char *arg)
{
! set_rlimit(cmd,&conf->limit_cpu,arg,RLIMIT_CPU);
return NULL;
}
#endif
***************
*** 892,898 ****
#if defined (RLIMIT_DATA) || defined (RLIMIT_VMEM)
char *set_limit_mem (cmd_parms *cmd, core_dir_config *conf, char *arg)
{
! set_rlimit(cmd,conf->limit_mem,arg);
return NULL;
}
#endif
--- 892,902 ----
#if defined (RLIMIT_DATA) || defined (RLIMIT_VMEM)
char *set_limit_mem (cmd_parms *cmd, core_dir_config *conf, char *arg)
{
! #ifdef RLIMIT_DATA
! set_rlimit(cmd,&conf->limit_mem,arg,RLIMIT_DATA);
! #else
! set_rlimit(cmd,&conf->limit_mem,arg,RLIMIT_VMEM);
! #endif
return NULL;
}
#endif
***************
*** 900,906 ****
#ifdef RLIMIT_NPROC
char *set_limit_nproc (cmd_parms *cmd, core_dir_config *conf, char *arg)
{
! set_rlimit(cmd,conf->limit_nproc,arg);
return NULL;
}
#endif
--- 904,910 ----
#ifdef RLIMIT_NPROC
char *set_limit_nproc (cmd_parms *cmd, core_dir_config *conf, char *arg)
{
! set_rlimit(cmd,&conf->limit_nproc,arg,RLIMIT_NPROC);
return NULL;
}
#endif