summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/launchpad-process-pool/src/launchpad.c26
1 files changed, 9 insertions, 17 deletions
diff --git a/src/launchpad-process-pool/src/launchpad.c b/src/launchpad-process-pool/src/launchpad.c
index be47523..ba901ce 100644
--- a/src/launchpad-process-pool/src/launchpad.c
+++ b/src/launchpad-process-pool/src/launchpad.c
@@ -530,7 +530,7 @@ static candidate_process_context_t *__get_running_slot(bool is_hydra)
return NULL;
}
-static void __pause_last_running_slot(bool is_hydra)
+static void __pause_all_running_slots(bool is_hydra)
{
candidate_process_context_t *cpc = NULL;
GList *iter;
@@ -538,16 +538,14 @@ static void __pause_last_running_slot(bool is_hydra)
iter = g_list_last(candidate_slot_list);
while (iter) {
cpc = (candidate_process_context_t *)iter->data;
- if (cpc->is_hydra == is_hydra && cpc->pid != CANDIDATE_NONE)
- break;
+ if (cpc->is_hydra == is_hydra && cpc->pid != CANDIDATE_NONE) {
+ __update_slot_state(cpc, METHOD_OUT_OF_MEMORY, true);
+ if (!_memory_monitor_is_low_memory())
+ return;
+ }
iter = g_list_previous(iter);
}
-
- if (!cpc)
- return;
-
- __update_slot_state(cpc, METHOD_OUT_OF_MEMORY, true);
}
static void __resume_all_slots(void)
@@ -1372,7 +1370,6 @@ static int __create_sock_activation(void)
snprintf(launchpad_process_pool_sock_path,
sizeof(launchpad_process_pool_sock_path), "%s/daemons/%u/%s",
SOCKET_PATH, getuid(), PROCESS_POOL_LAUNCHPAD_SOCK);
-
for (i = SD_LISTEN_FDS_START; i < SD_LISTEN_FDS_START + fds; ++i) {
if (sd_is_socket_unix(i, SOCK_STREAM, 1,
launchpad_process_pool_sock_path, 0) > 0)
@@ -2749,6 +2746,8 @@ static void __add_slot_from_info(gpointer data, gpointer user_data)
info->app_exists,
info->is_hydra,
info->app_check);
+
+ bundle_free_encoded_rawdata(&extra);
if (cpc == NULL)
return;
@@ -3023,14 +3022,7 @@ static int __memory_monitor_cb(bool low_memory, void *user_data)
candidate_slot_list = g_list_sort(candidate_slot_list,
__compare_slot);
-
- do {
- __pause_last_running_slot(false);
-
- cpc = __get_running_slot(false);
- if (!cpc)
- break;
- } while (__is_low_memory());
+ __pause_all_running_slots(false);
} else {
__resume_all_slots();
}