[Demonstration 1]

[Buggy Method]
private void goToLastChild() {
    ArrayList<ThoughtNode> children = _curr.children;
    if (children.size() == 0) {
        if (getCurrentThought().equals("")) {
            growChild();
        }
        return;
    }
    if (_curr.lastVisitedChild != null) {
        _curr = _curr.lastVisitedChild;
    } else {
        _curr = children.get(0);
    }
}

[Buggy Hunk]
if(getCurrentThought().equals("")) {

[Patch]
if(!getCurrentThought().equals("")) {

[Demonstration 2]

[Buggy Method]
public void deployServlet(String path, HttpServlet servlet, Map<String, String> initParams) {
    ServletHolder servletHolder = new ServletHolder(servlet);
    if (initParams != null)
        servletHolder.setInitParameters(initParams);
    servletHandler.addServlet(servletHolder, path);
}

[Buggy Hunk]
public void deployServlet(String path, HttpServlet servlet, Map<String, String> initParams)

[Patch]
public synchronized void deployServlet(String path, HttpServlet servlet, Map<String, String> initParams)

[Demonstration 3]

[Buggy Method]
@Override
public void listener() {
    if (selector == null) {
        return;
    }
    //开始初始化一些配置
    serverContext.init();
    LOGGER.info(ServerInfo.getName() + " is run versionStr -> " + ServerInfo.getVersion());
    LOGGER.info(serverConfig.getRouter().toString());
    try {
        if (pidFile == null) {
            pidFile = new File(PathUtil.getRootPath() + "/sim.pid");
        }
        EnvKit.savePid(pidFile.toString());
        pidFile.deleteOnExit();
    } catch (Throwable e) {
        LOGGER.log(Level.WARNING, "save pid error", e);
    }
    //防止检查线程被jvm杀死
    ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
    checkRequestRunnable = new CheckRequestRunnable(serverConfig.getTimeOut(), serverContext, socketHttpRequestHandlerThreadMap);
    scheduledExecutorService.scheduleAtFixedRate(checkRequestRunnable, 0, 100, TimeUnit.MILLISECONDS);
    while (selector.isOpen()) {
        try {
            selector.select();
            Set<SelectionKey> keys = selector.selectedKeys();
            Iterator<SelectionKey> iterator = keys.iterator();
            while (iterator.hasNext()) {
                SelectionKey key = iterator.next();
                SocketChannel channel = null;
                if (!key.isValid() || !key.channel().isOpen()) {
                    continue;
                } else if (key.isAcceptable()) {
                    ServerSocketChannel server = (ServerSocketChannel) key.channel();
                    try {
                        channel = server.accept();
                        if (channel != null) {
                            channel.configureBlocking(false);
                            channel.register(selector, SelectionKey.OP_READ);
                        }
                    } catch (IOException e) {
                        LOGGER.log(Level.SEVERE, "accept connect error", e);
                        if (channel != null) {
                            key.cancel();
                            channel.close();
                        }
                    }
                } else if (key.isReadable()) {
                    channel = (SocketChannel) key.channel();
                    if (!handleRequest(key, channel))
                        continue;
                }
                iterator.remove();
            }
        } catch (Throwable e) {
            LOGGER.log(Level.SEVERE, "", e);
        }
    }
}

[Buggy Hunk]
LOGGER.log(Level.WARNING, "save pid error", e);

[Patch]
LOGGER.log(Level.WARNING, "save pid error " + e.getMessage());