Program: 90595
Project: 90595
Buggy source:
@ServeResourceMethod(portletNames="String_Node_Str",asyncSupported=true) public void getResource(ResourceRequest req,ResourceResponse resp) throws IOException, PortletException {
  Integer reps=(Integer)req.getAttribute(ATTRIB_REPS);
  if (reps == null) {
    reps=adb.getReps();
  }
  boolean done=false;
  if (--reps <= 0 || !adb.isAutoDispatch()) {
    done=true;
  }
  req.setAttribute(ATTRIB_REPS,reps);
  Boolean auto=(Boolean)req.getAttribute(ATTRIB_AUTO);
  req.removeAttribute(ATTRIB_AUTO);
  if ((adb.getDelay() <= 0) || (auto != null)) {
    PortletRequestDispatcher rd;
    AsyncContext ctx=null;
    try {
      ctx=req.getAsyncContext();
    }
 catch (    Exception e) {
    }
    StringBuilder txt=new StringBuilder(128);
    txt.append("String_Node_Str");
    txt.append("String_Node_Str").append(adb.getDelay());
    txt.append("String_Node_Str").append(adb.getType());
    txt.append("String_Node_Str").append(reps);
    txt.append("String_Node_Str").append(adb.getReps());
    txt.append("String_Node_Str").append(adb.isAutoDispatch());
    txt.append("String_Node_Str").append(auto);
    txt.append("String_Node_Str").append((ctx == null) ? "String_Node_Str" : "String_Node_Str");
    LOGGER.fine(txt.toString());
switch (adb.getType()) {
case DISPATCH:
      LOGGER.fine("String_Node_Str");
    if (ctx != null) {
      ctx.dispatch(JSP);
    }
  break;
case FWD:
LOGGER.fine("String_Node_Str");
req.setAttribute(ATTRIB_TITLE,"String_Node_Str");
rd=req.getPortletContext().getRequestDispatcher(JSP);
rd.forward(req,resp);
if (done && ctx != null) {
ctx.complete();
}
break;
case INC:
LOGGER.fine("String_Node_Str");
req.setAttribute(ATTRIB_TITLE,"String_Node_Str");
rd=req.getPortletContext().getRequestDispatcher(JSP);
rd.include(req,resp);
if (done && ctx != null) {
ctx.complete();
}
break;
default :
LOGGER.fine("String_Node_Str");
txt.setLength(0);
txt.append("String_Node_Str");
txt.append("String_Node_Str").append(req.getDispatcherType().toString());
txt.append("String_Node_Str");
resp.getWriter().write(txt.toString());
if (done && ctx != null) {
ctx.complete();
}
break;
}
}
if (adb.getDelay() > 0 && (!done || auto == null)) {
AsyncContext ctx=req.startAsync();
ctx.setTimeout(4000);
OutputType type=adb.getType();
if (adb.isAutoDispatch()) {
type=OutputType.AUTO;
}
AsyncRunnable ar=new AsyncRunnable(ctx,adb.getDelay(),type,done);
ctx.start(ar);
}
}

Fixed version (ground truth):
@ServeResourceMethod(portletNames="String_Node_Str",asyncSupported=true) public void getResource(ResourceRequest req,ResourceResponse resp) throws IOException, PortletException {
  Boolean auto=(Boolean)req.getAttribute(ATTRIB_AUTO);
  if (auto == null) {
    auto=false;
  }
  req.removeAttribute(ATTRIB_AUTO);
  Integer reps=(Integer)req.getAttribute(ATTRIB_REPS);
  boolean done=false;
  if (reps == null) {
    reps=adb.getReps();
  }
  if (reps <= 0) {
    done=true;
  }
  StringBuilder txt=new StringBuilder(128);
  txt.append("String_Node_Str");
  txt.append("String_Node_Str").append(adb.getDelay());
  txt.append("String_Node_Str").append(adb.getType());
  txt.append("String_Node_Str").append(reps);
  txt.append("String_Node_Str").append(adb.getReps());
  txt.append("String_Node_Str").append(adb.isAutoDispatch());
  txt.append("String_Node_Str").append(auto);
  txt.append("String_Node_Str").append(done);
  LOGGER.fine(txt.toString());
  AsyncContext ctx=null;
  if (!done) {
    reps--;
    req.setAttribute(ATTRIB_REPS,reps);
    ctx=req.startAsync();
    ctx.setTimeout(4000);
  }
  if (auto || (adb.getDelay() <= 0)) {
    PortletRequestDispatcher rd;
    if (ctx == null) {
      try {
        ctx=req.getAsyncContext();
      }
 catch (      Exception e) {
        txt.setLength(0);
        txt.append("String_Node_Str").append(e.toString());
        LOGGER.warning(txt.toString());
        resp.getWriter().write(txt.toString());
        return;
      }
    }
    HttpServletRequest hreq=(HttpServletRequest)req.getAttribute("String_Node_Str");
{
      List<String> attrNames=Collections.list(hreq.getAttributeNames());
      StringBuilder txt2=new StringBuilder(128);
      txt2.append("String_Node_Str");
      txt2.append("String_Node_Str").append(attrNames);
      txt2.append("String_Node_Str").append((String)hreq.getAttribute("String_Node_Str"));
      txt2.append("String_Node_Str").append((String)hreq.getAttribute("String_Node_Str"));
      txt2.append("String_Node_Str").append((String)hreq.getAttribute("String_Node_Str"));
      txt2.append("String_Node_Str").append((String)hreq.getAttribute("String_Node_Str"));
      txt2.append("String_Node_Str").append((String)hreq.getAttribute("String_Node_Str"));
      txt2.append("String_Node_Str").append((String)hreq.getAttribute("String_Node_Str"));
      txt2.append("String_Node_Str").append((String)hreq.getAttribute("String_Node_Str"));
      txt2.append("String_Node_Str").append((String)hreq.getAttribute("String_Node_Str"));
      txt2.append("String_Node_Str").append((String)hreq.getAttribute("String_Node_Str"));
      txt2.append("String_Node_Str").append((String)hreq.getAttribute("String_Node_Str"));
      txt2.append("String_Node_Str").append((String)hreq.getAttribute("String_Node_Str"));
      txt2.append("String_Node_Str").append((String)hreq.getAttribute("String_Node_Str"));
      txt2.append("String_Node_Str").append((String)hreq.getAttribute("String_Node_Str"));
      txt2.append("String_Node_Str").append((String)hreq.getAttribute("String_Node_Str"));
      txt2.append("String_Node_Str").append((String)hreq.getAttribute("String_Node_Str"));
      txt2.append("String_Node_Str").append(hreq.getRequestURI());
      txt2.append("String_Node_Str").append(hreq.getContextPath());
      txt2.append("String_Node_Str").append(hreq.getServletPath());
      txt2.append("String_Node_Str").append(hreq.getPathInfo());
      txt2.append("String_Node_Str").append(hreq.getQueryString());
      LOGGER.fine(txt2.toString());
    }
    PortletConfig config=(PortletConfig)req.getAttribute("String_Node_Str");
    String portletName="String_Node_Str";
    if (config != null) {
      portletName=config.getPortletName();
    }
switch (adb.getType()) {
case DISPATCH:
      LOGGER.fine("String_Node_Str");
    ctx.dispatch(JSP);
  break;
case FWD:
LOGGER.fine("String_Node_Str");
req.setAttribute(ATTRIB_TITLE,"String_Node_Str");
rd=req.getPortletContext().getRequestDispatcher(JSP);
rd.forward(req,resp);
resp.flushBuffer();
if (!auto) {
ctx.complete();
}
break;
case INC:
LOGGER.fine("String_Node_Str");
req.setAttribute(ATTRIB_TITLE,"String_Node_Str");
rd=req.getPortletContext().getRequestDispatcher(JSP);
rd.include(req,resp);
resp.flushBuffer();
if (!auto) {
ctx.complete();
}
break;
default :
LOGGER.fine("String_Node_Str");
txt.setLength(0);
txt.append("String_Node_Str" + portletName + "String_Node_Str");
txt.append("String_Node_Str").append(req.getDispatcherType().toString());
txt.append("String_Node_Str");
resp.getWriter().write(txt.toString());
resp.flushBuffer();
if (!auto) {
ctx.complete();
}
break;
}
}
if (adb.getDelay() > 0 && req.isAsyncStarted()) {
OutputType type=adb.getType();
if (adb.isAutoDispatch()) {
type=OutputType.AUTO;
}
AsyncRunnable ar=new AsyncRunnable(ctx,adb.getDelay(),type,(reps <= 0));
ctx.start(ar);
}
}