chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
c74f17d
)
units: apply default resource limits to socket/mount/swap processes too
author
Lennart Poettering
<lennart@poettering.net>
Thu, 19 Jul 2012 22:09:35 +0000
(
00:09
+0200)
committer
Lennart Poettering
<lennart@poettering.net>
Thu, 19 Jul 2012 22:10:32 +0000
(
00:10
+0200)
src/core/mount.c
patch
|
blob
|
history
src/core/service.c
patch
|
blob
|
history
src/core/socket.c
patch
|
blob
|
history
src/core/swap.c
patch
|
blob
|
history
src/core/unit.c
patch
|
blob
|
history
src/core/unit.h
patch
|
blob
|
history
diff --git
a/src/core/mount.c
b/src/core/mount.c
index 5709db2266196c1a9e82ce25f35ae18bdb9a1598..83e51a7abad2e4a42bc30753ff45a7b9d4b5e13d 100644
(file)
--- a/
src/core/mount.c
+++ b/
src/core/mount.c
@@
-634,7
+634,7
@@
static int mount_load(Unit *u) {
if (r < 0)
return r;
if (r < 0)
return r;
- r = unit_
patch_working_directory(UNIT(m)
, &m->exec_context);
+ r = unit_
exec_context_defaults(u
, &m->exec_context);
if (r < 0)
return r;
}
if (r < 0)
return r;
}
diff --git
a/src/core/service.c
b/src/core/service.c
index 78f9a59c7f2cf684524a387efd2487d78cef0f56..30598de9b85ce380769df1953b939184dbc8c34b 100644
(file)
--- a/
src/core/service.c
+++ b/
src/core/service.c
@@
-130,7
+130,6
@@
static const UnitActiveState state_translation_table_idle[_SERVICE_STATE_MAX] =
static void service_init(Unit *u) {
Service *s = SERVICE(u);
static void service_init(Unit *u) {
Service *s = SERVICE(u);
- int i;
assert(u);
assert(u->load_state == UNIT_STUB);
assert(u);
assert(u->load_state == UNIT_STUB);
@@
-150,9
+149,6
@@
static void service_init(Unit *u) {
s->guess_main_pid = true;
exec_context_init(&s->exec_context);
s->guess_main_pid = true;
exec_context_init(&s->exec_context);
- for (i = 0; i < RLIMIT_NLIMITS; i++)
- if (UNIT(s)->manager->rlimit[i])
- s->exec_context.rlimit[i] = newdup(struct rlimit, UNIT(s)->manager->rlimit[i], 1);
kill_context_init(&s->kill_context);
RATELIMIT_INIT(s->start_limit, 10*USEC_PER_SEC, 5);
kill_context_init(&s->kill_context);
RATELIMIT_INIT(s->start_limit, 10*USEC_PER_SEC, 5);
@@
-1284,7
+1280,7
@@
static int service_load(Unit *u) {
if ((r = service_add_default_dependencies(s)) < 0)
return r;
if ((r = service_add_default_dependencies(s)) < 0)
return r;
- r = unit_
patch_working_directory(UNIT(s)
, &s->exec_context);
+ r = unit_
exec_context_defaults(u
, &s->exec_context);
if (r < 0)
return r;
}
if (r < 0)
return r;
}
diff --git
a/src/core/socket.c
b/src/core/socket.c
index 19b463e6a452553c6cc922f79764ab796bd5202f..837b166e3bdac367e144634218d92a5b34a776ce 100644
(file)
--- a/
src/core/socket.c
+++ b/
src/core/socket.c
@@
-374,7
+374,7
@@
static int socket_load(Unit *u) {
if ((r = socket_add_default_dependencies(s)) < 0)
return r;
if ((r = socket_add_default_dependencies(s)) < 0)
return r;
- r = unit_
patch_working_directory(UNIT(s)
, &s->exec_context);
+ r = unit_
exec_context_defaults(u
, &s->exec_context);
if (r < 0)
return r;
}
if (r < 0)
return r;
}
diff --git
a/src/core/swap.c
b/src/core/swap.c
index 91bb0215b1efee52d62c97ea26659e358bdd4fa7..458e00efe55d79515c8ee1dcf9e5ae44eeb62431 100644
(file)
--- a/
src/core/swap.c
+++ b/
src/core/swap.c
@@
-296,7
+296,7
@@
static int swap_load(Unit *u) {
if ((r = swap_add_default_dependencies(s)) < 0)
return r;
if ((r = swap_add_default_dependencies(s)) < 0)
return r;
- r = unit_
patch_working_directory(UNIT(s)
, &s->exec_context);
+ r = unit_
exec_context_defaults(u
, &s->exec_context);
if (r < 0)
return r;
}
if (r < 0)
return r;
}
diff --git
a/src/core/unit.c
b/src/core/unit.c
index 3b416f945fcc20ccac996d6322ff43103f0bfbe1..7b2f597589cfc5c76bea5421c6327ee77c4cdac3 100644
(file)
--- a/
src/core/unit.c
+++ b/
src/core/unit.c
@@
-2816,17
+2816,31
@@
int unit_add_mount_links(Unit *u) {
return 0;
}
return 0;
}
-int unit_patch_working_directory(Unit *u, ExecContext *c) {
+int unit_exec_context_defaults(Unit *u, ExecContext *c) {
+ unsigned i;
+ int r;
+
assert(u);
assert(c);
assert(u);
assert(c);
- if (u->manager->running_as != MANAGER_USER)
- return 0;
+ /* This only copies in the ones that need memory */
- if (c->working_directory)
- return 0;
+ for (i = 0; i < RLIMIT_NLIMITS; i++)
+ if (u->manager->rlimit[i] && !c->rlimit[i]) {
+ c->rlimit[i] = newdup(struct rlimit, u->manager->rlimit[i], 1);
+ if (!c->rlimit[i])
+ return -ENOMEM;
+ }
+
+ if (u->manager->running_as == MANAGER_USER &&
+ !c->working_directory) {
- return get_home_dir(&c->working_directory);
+ r = get_home_dir(&c->working_directory);
+ if (r < 0)
+ return r;
+ }
+
+ return 0;
}
static const char* const unit_active_state_table[_UNIT_ACTIVE_STATE_MAX] = {
}
static const char* const unit_active_state_table[_UNIT_ACTIVE_STATE_MAX] = {
diff --git
a/src/core/unit.h
b/src/core/unit.h
index f0041798947a392c43e72f391178264e18a4c686..2102b7a57001f94cc7e3c6376d58d36c2fd46d7c 100644
(file)
--- a/
src/core/unit.h
+++ b/
src/core/unit.h
@@
-536,7
+536,7
@@
void unit_ref_unset(UnitRef *ref);
int unit_add_one_mount_link(Unit *u, Mount *m);
int unit_add_mount_links(Unit *u);
int unit_add_one_mount_link(Unit *u, Mount *m);
int unit_add_mount_links(Unit *u);
-int unit_
patch_working_directory
(Unit *u, ExecContext *c);
+int unit_
exec_context_defaults
(Unit *u, ExecContext *c);
const char *unit_active_state_to_string(UnitActiveState i);
UnitActiveState unit_active_state_from_string(const char *s);
const char *unit_active_state_to_string(UnitActiveState i);
UnitActiveState unit_active_state_from_string(const char *s);