Merge "lmkd: Implement pid purge command to clear old pids when zygote restarts"
This commit is contained in:
commit
79e5b550ce
2 changed files with 40 additions and 0 deletions
|
|
@ -30,6 +30,7 @@ enum lmk_cmd {
|
||||||
LMK_TARGET = 0, /* Associate minfree with oom_adj_score */
|
LMK_TARGET = 0, /* Associate minfree with oom_adj_score */
|
||||||
LMK_PROCPRIO, /* Register a process and set its oom_adj_score */
|
LMK_PROCPRIO, /* Register a process and set its oom_adj_score */
|
||||||
LMK_PROCREMOVE, /* Unregister a process */
|
LMK_PROCREMOVE, /* Unregister a process */
|
||||||
|
LMK_PROCPURGE, /* Purge all registered processes */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -142,6 +143,15 @@ inline size_t lmkd_pack_set_procremove(LMKD_CTRL_PACKET packet,
|
||||||
return 2 * sizeof(int);
|
return 2 * sizeof(int);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Prepare LMK_PROCPURGE packet and return packet size in bytes.
|
||||||
|
* Warning: no checks performed, caller should ensure valid parameters.
|
||||||
|
*/
|
||||||
|
inline size_t lmkd_pack_set_procpurge(LMKD_CTRL_PACKET packet) {
|
||||||
|
packet[0] = htonl(LMK_PROCPURGE);
|
||||||
|
return sizeof(int);
|
||||||
|
}
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
#endif /* _LMKD_H_ */
|
#endif /* _LMKD_H_ */
|
||||||
|
|
|
||||||
30
lmkd/lmkd.c
30
lmkd/lmkd.c
|
|
@ -619,6 +619,31 @@ static void cmd_procremove(LMKD_CTRL_PACKET packet) {
|
||||||
pid_remove(params.pid);
|
pid_remove(params.pid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cmd_procpurge() {
|
||||||
|
int i;
|
||||||
|
struct proc *procp;
|
||||||
|
struct proc *next;
|
||||||
|
|
||||||
|
if (use_inkernel_interface) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i <= ADJTOSLOT(OOM_SCORE_ADJ_MAX); i++) {
|
||||||
|
procadjslot_list[i].next = &procadjslot_list[i];
|
||||||
|
procadjslot_list[i].prev = &procadjslot_list[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < PIDHASH_SZ; i++) {
|
||||||
|
procp = pidhash[i];
|
||||||
|
while (procp) {
|
||||||
|
next = procp->pidhash_next;
|
||||||
|
free(procp);
|
||||||
|
procp = next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
memset(&pidhash[0], 0, sizeof(pidhash));
|
||||||
|
}
|
||||||
|
|
||||||
static void cmd_target(int ntargets, LMKD_CTRL_PACKET packet) {
|
static void cmd_target(int ntargets, LMKD_CTRL_PACKET packet) {
|
||||||
int i;
|
int i;
|
||||||
struct lmk_target target;
|
struct lmk_target target;
|
||||||
|
|
@ -761,6 +786,11 @@ static void ctrl_command_handler(int dsock_idx) {
|
||||||
goto wronglen;
|
goto wronglen;
|
||||||
cmd_procremove(packet);
|
cmd_procremove(packet);
|
||||||
break;
|
break;
|
||||||
|
case LMK_PROCPURGE:
|
||||||
|
if (nargs != 0)
|
||||||
|
goto wronglen;
|
||||||
|
cmd_procpurge();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ALOGE("Received unknown command code %d", cmd);
|
ALOGE("Received unknown command code %d", cmd);
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue