summaryrefslogtreecommitdiff
path: root/usr/src/lib/libproject/common/setproject.c
diff options
context:
space:
mode:
authorJerry Jelinek <jerry.jelinek@joyent.com>2012-02-07 17:13:28 +0000
committerRobert Mustacchi <rm@joyent.com>2014-01-14 08:55:45 -0800
commit96ab4d5390a62b7e1743ec1fad5c0eef9682b961 (patch)
tree4c66933d27bd91bb01bedc2c0b82186bc58f8df3 /usr/src/lib/libproject/common/setproject.c
parent1444d846b126463eb1059a572ff114d51f7562e5 (diff)
downloadillumos-gate-96ab4d5390a62b7e1743ec1fad5c0eef9682b961.tar.gz
4336 Cannot raise the file descriptor limit over 64K for a project under SMF
Reviewed by: Robert Mustacchi <rm@joyent.com> Reviewed by: T Nguyen <truongqnguien@gmail.com> Approved by: Richard Lowe <richlowe@richlowe.net>
Diffstat (limited to 'usr/src/lib/libproject/common/setproject.c')
-rw-r--r--usr/src/lib/libproject/common/setproject.c20
1 files changed, 5 insertions, 15 deletions
diff --git a/usr/src/lib/libproject/common/setproject.c b/usr/src/lib/libproject/common/setproject.c
index e24a8b78c6..ef208845a1 100644
--- a/usr/src/lib/libproject/common/setproject.c
+++ b/usr/src/lib/libproject/common/setproject.c
@@ -20,6 +20,7 @@
*/
/*
* Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, Joyent, Inc. All rights reserved.
*/
@@ -199,9 +200,7 @@ rctl_set(char *ctl_name, char *val, struct ps_prochandle *Pr, int flags)
int count = 0;
char *tmp;
int local_act;
- rctlblk_t *rlast;
rctlblk_t *rnext;
- rctlblk_t *rtmp;
int teardown_basic = 0;
int teardown_priv = 0;
@@ -358,44 +357,35 @@ rctl_set(char *ctl_name, char *val, struct ps_prochandle *Pr, int flags)
/* teardown rctls if required */
if (!project_entity) {
- if ((rlast = (rctlblk_t *)malloc(rctlblk_size())) == NULL) {
- free(ablk);
- return (SETFAILED);
- }
if ((rnext = (rctlblk_t *)malloc(rctlblk_size())) == NULL) {
free(ablk);
- free(rlast);
return (SETFAILED);
}
+restart:
if (pr_getrctl(Pr, ctl_name, NULL, rnext, RCTL_FIRST) == 0) {
-
while (1) {
if ((rctlblk_get_privilege(rnext) ==
RCPRIV_PRIVILEGED) &&
(teardown_priv == 1)) {
(void) pr_setrctl(Pr, ctl_name, NULL,
rnext, RCTL_DELETE);
+ goto restart;
}
if ((rctlblk_get_privilege(rnext) ==
RCPRIV_BASIC) && (teardown_basic == 1)) {
(void) pr_setrctl(Pr, ctl_name, NULL,
rnext, RCTL_DELETE);
+ goto restart;
}
- rtmp = rnext;
- rnext = rlast;
- rlast = rtmp;
- if (pr_getrctl(Pr, ctl_name, rlast, rnext,
+ if (pr_getrctl(Pr, ctl_name, rnext, rnext,
RCTL_NEXT) == -1)
break;
}
-
}
free(rnext);
- free(rlast);
-
}
/* set rctls */