- struct rlimit olim; /* current limit values */
- struct rlimit nlim; /* new limit values */
-
- if (slr != 0) {
- /* set memory limits */
- getrlimit(RLIMIT_RSS,&olim);
- if (0) /* for debugging only */
- fprintf(stderr,"rss cur = %ld, max = %ld, vs_rss min = %ld\n",olim.rlim_cur,olim.rlim_max,slr->vs_rss.min);
- if ((slr->vs_rss.min != VC_LIM_KEEP) && (slr->vs_rss.min > olim.rlim_cur)) {
- nlim.rlim_cur = slr->vs_rss.min;
- if (slr->vs_rss.min > olim.rlim_max) {
- nlim.rlim_max = slr->vs_rss.min;
- } else {
- nlim.rlim_max = olim.rlim_max;
- }
- setrlimit(RLIMIT_RSS, &nlim);
- }
- if (vc_set_rlimit(ctx, RLIMIT_RSS, &slr->vs_rss))
- {
- PERROR("pl_setrlimit(%u, RLIMIT_RSS)", ctx);
- exit(1);
- }
-
- /* set address space limits */
- getrlimit(RLIMIT_AS,&olim);
- if (0) /* for debugging only */
- fprintf(stderr,"as cur = %ld, max = %ld, vs_as min = %ld\n",olim.rlim_cur,olim.rlim_max,slr->vs_as.min);
- if ((slr->vs_as.min != VC_LIM_KEEP) && (slr->vs_as.min > olim.rlim_cur)) {
- nlim.rlim_cur = slr->vs_as.min;
- if (slr->vs_as.min > olim.rlim_max) {
- nlim.rlim_max = slr->vs_as.min;
- } else {
- nlim.rlim_max = olim.rlim_max;
- }
- setrlimit(RLIMIT_AS, &nlim);