OSDN Git Service

staging: android: lowmemorykiller: Don't wait more than one second for a process...
authorArve Hjønnevåg <arve@android.com>
Wed, 24 Nov 2010 02:20:28 +0000 (18:20 -0800)
committerBrian Swetland <swetland@google.com>
Tue, 29 Mar 2011 20:58:01 +0000 (13:58 -0700)
If a process forked and the child process was killed by the
lowmemorykiller, the lowmemory killer would be disabled until
the parent process reaped the child or it died itself.

Change-Id: I709b1a4e1b1a1970e51d26a39fcbee57977bbc7f
Signed-off-by: Arve Hjønnevåg <arve@android.com>
drivers/staging/android/lowmemorykiller.c

index efbe556..4c455cf 100644 (file)
@@ -53,6 +53,7 @@ static size_t lowmem_minfree[6] = {
 static int lowmem_minfree_size = 4;
 
 static struct task_struct *lowmem_deathpending;
+static unsigned long lowmem_deathpending_timeout;
 
 #define lowmem_print(level, x...)                      \
        do {                                            \
@@ -99,7 +100,8 @@ static int lowmem_shrink(struct shrinker *s, int nr_to_scan, gfp_t gfp_mask)
         * this pass.
         *
         */
-       if (lowmem_deathpending)
+       if (lowmem_deathpending &&
+           time_before_eq(jiffies, lowmem_deathpending_timeout))
                return 0;
 
        if (lowmem_adj_size < array_size)
@@ -168,6 +170,7 @@ static int lowmem_shrink(struct shrinker *s, int nr_to_scan, gfp_t gfp_mask)
                             selected->pid, selected->comm,
                             selected_oom_adj, selected_tasksize);
                lowmem_deathpending = selected;
+               lowmem_deathpending_timeout = jiffies + HZ;
                force_sig(SIGKILL, selected);
                rem -= selected_tasksize;
        }