lmkd: Implement pid purge command to clear old pids when zygote restarts
am: c89be17730
Change-Id: I11ebb0c22eedeaebd1c8f55ad5bec17abb82ba82
This commit is contained in:
commit
e6fcbe0719
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_PROCPRIO, /* Register a process and set its oom_adj_score */
|
||||
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);
|
||||
}
|
||||
|
||||
/*
|
||||
* 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
|
||||
|
||||
#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);
|
||||
}
|
||||
|
||||
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) {
|
||||
int i;
|
||||
struct lmk_target target;
|
||||
|
|
@ -761,6 +786,11 @@ static void ctrl_command_handler(int dsock_idx) {
|
|||
goto wronglen;
|
||||
cmd_procremove(packet);
|
||||
break;
|
||||
case LMK_PROCPURGE:
|
||||
if (nargs != 0)
|
||||
goto wronglen;
|
||||
cmd_procpurge();
|
||||
break;
|
||||
default:
|
||||
ALOGE("Received unknown command code %d", cmd);
|
||||
return;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue