[Demonstration 1]

[Buggy Method]
private void play() {
    if (videoPlayer == null || !playerPrepared) {
        return;
    }
    if (videoPlayer.isPlaying()) {
        videoPlayer.pause();
        playButton.setImageResource(R.drawable.video_play);
    } else {
        try {
            playButton.setImageDrawable(null);
            lastProgress = 0;
            if (needSeek) {
                float prog = videoTimelineView.getLeftProgress() + (videoTimelineView.getRightProgress() - videoTimelineView.getLeft()) * videoSeekBarView.getProgress();
                videoPlayer.seekTo((int) (videoDuration * prog));
                needSeek = false;
            }
            videoPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {

                @Override
                public void onSeekComplete(MediaPlayer mp) {
                    float startTime = videoTimelineView.getLeftProgress() * videoDuration;
                    float endTime = videoTimelineView.getRightProgress() * videoDuration;
                    if (startTime == endTime) {
                        startTime = endTime - 0.01f;
                    }
                    lastProgress = (videoPlayer.getCurrentPosition() - startTime) / (endTime - startTime);
                    float lrdiff = videoTimelineView.getRightProgress() - videoTimelineView.getLeftProgress();
                    lastProgress = videoTimelineView.getLeftProgress() + lrdiff * lastProgress;
                    videoSeekBarView.setProgress(lastProgress);
                }
            });
            videoPlayer.start();
            synchronized (sync) {
                if (thread != null) {
                    thread = new Thread(progressRunnable);
                    thread.start();
                }
            }
        } catch (Exception e) {
            FileLog.e("tmessages", e);
        }
    }
}

[Buggy Hunk]
if (thread != null) {

[Patch]
if (thread == null) {

[Demonstration 2]

[Buggy Method]
private void reboot() {
    IBinder powerBinder = SysServiceProxy.getInstance(this).getService(Context.POWER_SERVICE);
    AppLogger.d(TAG, "power binder: " + powerBinder);
    if (powerBinder != null) {
        Object powerService = PowerManagerIA.asInterface(powerBinder);
        AppLogger.d(TAG, "power service: " + powerService);
        if (powerService != null) {
            PowerManagerIA.reboot(powerService, "reboot");
        }
    } else {
        mHandler.obtainMessage(MSG_DAEMON_NOT_RUNNING).sendToTarget();
    }
}

[Buggy Hunk]
IBinder powerBinder = SysServiceProxy.getInstance(this).getService(Context.POWER_SERVICE);

[Patch]
IBinder powerBinder = SysServiceProxy.getInstance(this).checkService(Context.POWER_SERVICE);

[Demonstration 3]

[Buggy Method]
@Override
public void close() {
    closed = true;
    closeQuietly(this.handler);
    service.shutdownNow();
    try {
        if (thread != null)
            thread.join(100);
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
    if (thread.isAlive()) {
        StackTraceElement[] stackTrace = thread.getStackTrace();
        StringBuilder sb = new StringBuilder(thread + " still running ");
        Jvm.trimStackTrace(sb, stackTrace);
        System.out.println(sb);
    }
}

[Buggy Hunk]
if (thread.isAlive()) {

[Patch]
if (thread != null && thread.isAlive()) {