Program: 180157
Project: 180157
Buggy source:
/** 
 * This method is responsible for loading and starting any bundles that provide Modlets for given module type. After bundle(s) are started, those bundles expose IModulet services. The BMI activator then listens for modlets. Upon new modlet creation, the setup is called.
 * @param event event to handle
 */
public void handleEvent(BMIModuleEvent event){
  if (!modletFactories.containsKey(event.getModuleId())) {
    logService.log(LogService.LOG_ERROR,"String_Node_Str" + event.getModuleId());
    return;
  }
  try {
    List<IModlet> ml;
switch (event.getType()) {
case INSERT:
      for (      IModletFactory mf : modletFactories.get(event.getModuleId())) {
        IModlet m=mf.createModlet(context,event.getSlot(),event.getBMIDevice());
        try {
          m.setup();
        }
 catch (        Exception e) {
          logService.log(LogService.LOG_ERROR,"String_Node_Str" + mf.getName() + "String_Node_Str"+ e.getMessage(),e);
          continue;
        }
        m.start();
        logService.log(LogService.LOG_INFO,"String_Node_Str" + mf.getName() + "String_Node_Str");
        if (!activeModlets.containsKey(m.getModuleId())) {
          activeModlets.put(m.getModuleId(),new ArrayList<IModlet>());
        }
        List<IModlet> am=activeModlets.get(m.getModuleId());
        if (!am.contains(m)) {
          am.add(m);
        }
      }
    break;
case REMOVE:
  List<IModlet> removalList=new ArrayList<IModlet>();
ml=activeModlets.get(event.getModuleId());
for (IModlet m : ml) {
if (m.getSlotId() == event.getSlot()) {
  logService.log(LogService.LOG_INFO,"String_Node_Str" + m.getModuleId() + "String_Node_Str");
  m.stop();
  removalList.add(m);
}
}
for (IModlet m : removalList) ml.remove(m);
removalList.clear();
logService.log(LogService.LOG_INFO,"String_Node_Str");
break;
}
}
 catch (BundleException e) {
logService.log(LogService.LOG_ERROR,"String_Node_Str" + e.getClass().getName() + "String_Node_Str"+ e.getMessage());
StringWriter sw=new StringWriter();
e.printStackTrace(new PrintWriter(sw));
logService.log(LogService.LOG_ERROR,sw.getBuffer().toString());
if (e.getNestedException() != null) {
logService.log(LogService.LOG_ERROR,"String_Node_Str" + e.getNestedException().getClass().getName() + "String_Node_Str"+ e.getNestedException().getMessage());
}
e.printStackTrace();
}
catch (Exception e) {
logService.log(LogService.LOG_ERROR,"String_Node_Str" + e.getClass().getName() + "String_Node_Str"+ e.getMessage());
StringWriter sw=new StringWriter();
e.printStackTrace(new PrintWriter(sw));
logService.log(LogService.LOG_ERROR,sw.getBuffer().toString());
}
}

Fixed version (ground truth):
/** 
 * This method is responsible for loading and starting any bundles that provide Modlets for given module type. After bundle(s) are started, those bundles expose IModulet services. The BMI activator then listens for modlets. Upon new modlet creation, the setup is called.
 * @param event event to handle
 */
public void handleEvent(BMIModuleEvent event){
  if (!modletFactories.containsKey(event.getModuleId())) {
    logService.log(LogService.LOG_ERROR,"String_Node_Str" + event.getModuleId());
    return;
  }
  try {
    List<IModlet> ml;
switch (event.getType()) {
case INSERT:
      for (      IModletFactory mf : modletFactories.get(event.getModuleId())) {
        IModlet m=mf.createModlet(context,event.getSlot(),event.getBMIDevice());
        try {
          m.setup();
        }
 catch (        Exception e) {
          logService.log(LogService.LOG_ERROR,"String_Node_Str" + mf.getName() + "String_Node_Str"+ e.getMessage(),e);
          continue;
        }
        m.start();
        logService.log(LogService.LOG_INFO,"String_Node_Str" + mf.getName() + "String_Node_Str");
        if (!activeModlets.containsKey(m.getModuleId())) {
          activeModlets.put(m.getModuleId(),new CopyOnWriteArrayList<IModlet>());
        }
        List<IModlet> am=activeModlets.get(m.getModuleId());
        if (!am.contains(m)) {
          am.add(m);
        }
      }
    break;
case REMOVE:
  List<IModlet> removalList=new ArrayList<IModlet>();
ml=activeModlets.get(event.getModuleId());
for (IModlet m : ml) {
if (m.getSlotId() == event.getSlot()) {
  logService.log(LogService.LOG_INFO,"String_Node_Str" + m.getModuleId() + "String_Node_Str");
  m.stop();
  removalList.add(m);
}
}
for (IModlet m : removalList) ml.remove(m);
removalList.clear();
logService.log(LogService.LOG_INFO,"String_Node_Str");
break;
}
}
 catch (BundleException e) {
logService.log(LogService.LOG_ERROR,"String_Node_Str" + e.getClass().getName() + "String_Node_Str"+ e.getMessage());
StringWriter sw=new StringWriter();
e.printStackTrace(new PrintWriter(sw));
logService.log(LogService.LOG_ERROR,sw.getBuffer().toString());
if (e.getNestedException() != null) {
logService.log(LogService.LOG_ERROR,"String_Node_Str" + e.getNestedException().getClass().getName() + "String_Node_Str"+ e.getNestedException().getMessage());
}
e.printStackTrace();
}
catch (Exception e) {
logService.log(LogService.LOG_ERROR,"String_Node_Str" + e.getClass().getName() + "String_Node_Str"+ e.getMessage());
StringWriter sw=new StringWriter();
e.printStackTrace(new PrintWriter(sw));
logService.log(LogService.LOG_ERROR,sw.getBuffer().toString());
}
}