Buggy code:
public class GenymotionRunner extends AbstractRunner { public GenymotionRunner ( CrazyMonkeyBuild build , Task task , AndroidSdk androidSdk , StreamTaskListener taskListener ) { } @ Override public boolean startUp ( ) throws IOException , InterruptedException { if ( ( logger ) == null ) { logger = taskListener . getLogger ( ) ; } AndroidEmulator emuConfig = task . getEmulator ( ) ; final AndroidEmulatorContext emu = new AndroidEmulatorContext ( build , "" , androidSdk , taskListener ) ; this . setContext ( emu ) ; final long bootTime = System . currentTimeMillis ( ) ; boolean playSuccess = playGenymotion ( emu ) ; if ( ! playSuccess ) { log ( logger , "Play<seq2seq4repair_space>the<seq2seq4repair_space>genymotion<seq2seq4repair_space>failed." ) ; task . setStatus ( NOT_BUILT ) ; return false ; } boolean connectSuccess = connectGenymotion ( ) ; if ( ! connectSuccess ) { log ( logger , "Could<seq2seq4repair_space>not<seq2seq4repair_space>get<seq2seq4repair_space>the<seq2seq4repair_space>serial<seq2seq4repair_space>no<seq2seq4repair_space>and<seq2seq4repair_space>write<seq2seq4repair_space>to<seq2seq4repair_space>a<seq2seq4repair_space>file." ) ; task . setStatus ( NOT_BUILT ) ; return false ; } final String fileName = ( "genymotion_" + ( task . getEmulator ( ) . getAvdName ( ) ) ) + ".ini" ; String serial = getSerialForGenyMotion ( fileName ) ; emu . setSerial ( serial ) ; if ( serial == null ) { log ( logger , String . format ( "Could<seq2seq4repair_space>not<seq2seq4repair_space>get<seq2seq4repair_space>the<seq2seq4repair_space>serial<seq2seq4repair_space>no<seq2seq4repair_space>from<seq2seq4repair_space>the<seq2seq4repair_space>file<seq2seq4repair_space>%s" , fileName ) ) ; task . setStatus ( NOT_BUILT ) ; return false ; } int result = emu . getToolProcStarter ( ADB , ( "connect<seq2seq4repair_space>" + ( emu . getSerial ( ) ) ) ) . join ( ) ; if ( result != 0 ) { log ( logger , Messages . CANNOT_CONNECT_TO_EMULATOR ( ) ) ; task . setStatus ( NOT_BUILT ) ; return false ; } <START_BUG> boolean ignoreProcess = ( ! ( Utils . isUnix ( ) ) ) && ( ( androidSdk . getSdkToolsVersion ( ) ) >= 12 ) ; <END_BUG> log ( logger , Messages . WAITING_FOR_BOOT_COMPLETION ( ) ) ; int bootTimeout = ( CrazyMonkeyBuild . BOOT_COMPLETE_TIMEOUT_MS ) * 2 ; boolean bootSucceeded = waitForBootCompletion ( ignoreProcess , bootTimeout , emuConfig , emu ) ; if ( ! bootSucceeded ) { if ( ( ( System . currentTimeMillis ( ) ) - bootTime ) < bootTimeout ) { log ( logger , Messages . EMULATOR_STOPPED_DURING_BOOT ( ) ) ; } else { log ( logger , Messages . BOOT_COMPLETION_TIMED_OUT ( ( bootTimeout // 1000 ) ) ) ; } task . setStatus ( NOT_BUILT ) ; return false ; } final long bootCompleteTime = System . currentTimeMillis ( ) ; log ( logger , Messages . EMULATOR_IS_READY ( ( ( bootCompleteTime - bootTime ) // 1000 ) ) ) ; return true ; } public boolean playGenymotion ( final AndroidEmulatorContext emu ) throws IOException , InterruptedException { } public boolean connectGenymotion ( ) throws IOException , InterruptedException { } @ Override public boolean tearDown ( ) throws IOException , InterruptedException { } public String getSerialForGenyMotion ( String fileName ) { } }

Fix:
boolean ignoreProcess = true ;