| Index: dm/DM.cpp | 
| diff --git a/dm/DM.cpp b/dm/DM.cpp | 
| index 9739210bc2e4eb3584a4f08ede0e3506a6130230..2734b7589abe37c5b8a144a92cd7699a3e5185b1 100644 | 
| --- a/dm/DM.cpp | 
| +++ b/dm/DM.cpp | 
| @@ -518,16 +518,22 @@ static void run_enclave_and_gpu_tests(SkTArray<Task>* tasks) { | 
|  | 
| // Some runs (mostly, Valgrind) are so slow that the bot framework thinks we've hung. | 
| // This prints something every once in a while so that it knows we're still working. | 
| -static void keep_alive(void*) { | 
| -    for (;;) { | 
| -        static const int kSec = 300; | 
| -#if defined(SK_BUILD_FOR_WIN) | 
| -        Sleep(kSec * 1000); | 
| -#else | 
| -        sleep(kSec); | 
| -#endif | 
| -        SkDebugf("\nStill alive: doing science, reticulating splines...\n"); | 
| -    } | 
| +static void start_keepalive() { | 
| +    struct Loop { | 
| +        static void forever(void*) { | 
| +            for (;;) { | 
| +                static const int kSec = 300; | 
| +            #if defined(SK_BUILD_FOR_WIN) | 
| +                Sleep(kSec * 1000); | 
| +            #else | 
| +                sleep(kSec); | 
| +            #endif | 
| +                SkDebugf("\nStill alive: doing science, reticulating splines...\n"); | 
| +            } | 
| +        } | 
| +    }; | 
| +    static SkThread* intentionallyLeaked = new SkThread(Loop::forever); | 
| +    intentionallyLeaked->start(); | 
| } | 
|  | 
| int dm_main(); | 
| @@ -539,8 +545,7 @@ int dm_main() { | 
| SkInstCountPrintLeaksOnExit(); | 
| } | 
|  | 
| -    SkThread keepAlive(keep_alive);  // This thread will just be killed by processes shutdown. | 
| -    keepAlive.start(); | 
| +    start_keepalive(); | 
|  | 
| gather_gold(); | 
|  | 
|  |