[Demonstration 1]

[Buggy Method]
@Test
public void test_1() throws Exception {
    final KafkaMessageSenderPool<byte[], byte[]> pool = new KafkaMessageSenderPool<byte[], byte[]>();
    pool.returnSender(pool.getSender());
    Thread thread1 = new Thread(new Runnable() {

        @Override
        public void run() {
            pool.setPoolSize(20);
            pool.init();
        }
    });
    thread1.start();
    Thread thread2 = new Thread(new Runnable() {

        @Override
        public void run() {
            pool.setPoolSize(0);
            pool.init();
        }
    });
    thread2.start();
    pool.destroy();
}

[Buggy Hunk]
pool.returnSender(pool.getSender());

[Patch]
pool.getSender();

[Demonstration 2]

[Buggy Method]
public static void classPlacement(ArrayList<Teacher> teacherData, ArrayList<Student> studentData) {
    int j = 0;
    while (j < studentData.size()) {
        if (!(studentData.get(j).getClassPref().equals("0"))) {
            int i = 0;
            while (!((teacherData.get(i).equals(studentData.get(j).getGrade())) && (teacherData.get(i).getSubject().equals(studentData.get(j).getClassPref())))) {
                i++;
                if (i == teacherData.size()) {
                    break;
                }
            }
            if ((i < teacherData.size()) && (teacherData.get(i).getNumStudents() < 25)) {
                teacherData.get(i).addStudent(studentData.get(j));
                studentData.remove(j);
                j--;
            }
        }
        j++;
    }
}

[Buggy Hunk]
while (!((teacherData.get(i).equals(studentData.get(j).getGrade())) && (teacherData.get(i).getSubject().equals(studentData.get(j).getClassPref())))){

[Patch]
while (!((teacherData.get(i).getGrade().equals(studentData.get(j).getGrade())) && (teacherData.get(i).getSubject().equals(studentData.get(j).getClassPref())))){

[Demonstration 3]

[Buggy Method]
public void testSharedMemory() throws IOException {
    LocalCacheSharedMemory shm = new LocalCacheSharedMemory();
    shm.initialize("test0.shm");
    for (int i = 0; i < 5; i++) {
        SharedMemoryObject obj = SharedMemoryStruct.SharedMemoryObject.newBuilder().setIp("127.0.0.1").setKey("test-key").setValue("hello world" + i).setTimestamp(System.currentTimeMillis()).build();
        shm.write(obj);
    }
    while (true) {
        SharedMemoryObject out = shm.read();
        if (out == null) {
            break;
        }
        System.out.println("output:" + out.getIp() + " " + out.getKey() + " " + out.getValue() + " " + out.getTimestamp());
    }
    shm.destroy();
}

[Buggy Hunk]
public void testSharedMemory() throws IOException{

[Patch]
public void testSharedMemory() throws Exception{