docs: @Override
      @FFDCIgnore({ IOException.class })
      public void run() {
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()){  
              Tr.debug(tc, "Run WriteListenerRunnable start, WriteListener enabled: " + this._listener +" , current thread -->"+ Thread.currentThread().getName()); 
          }
          //clean up everything on this thread
          WebContainerRequestState reqState = WebContainerRequestState.getInstance(false);
          if (reqState!=null){
              reqState.init();
          }
          
          SRTServletRequestThreadData.getInstance().init(_requestDataWriteListenerThread);
          
          //Push the original thread's context onto the current thread, also save off the current thread's context
          _tcm.pushContextData();
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()){  
              Tr.debug(tc, "Invoking the onWritePossible first time");
          }
          WebContainerRequestState.getInstance(true).setAttribute("com.ibm.ws.webcontainer.WriteAllowedonThisThread", true); 
          if(_hout != null){
              synchronized(_hout) {
                  try {     
                      //call onWritePossible
                      this._listener.onWritePossible();
                      
                  } catch (Exception e){
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()){
                          Tr.debug(tc, "An exception occurred during the onWritePossible : " + e); 
                      }
                      _hout.setExceptionDuringOnWP(true);
                      _cb.error(_hout.getVc(), e );
                  }
                  finally{
                      //Revert back to the thread's current context
                      _tcm.popContextData();
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()){
                          Tr.debug(tc, "Run WriteListenerRunnable done");
                      }
                  }
              }
          }
          else{
              try {     
                  //call onWritePossible
                  this._listener.onWritePossible();
  
              } catch (IOException ioe){
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()){
                      Tr.debug(tc, "An exception occurred during the onWritePossible : " + ioe); 
                  }
                  this._listener.onError(ioe);
              }
              finally{
                  //Revert back to the thread's current context
                  _tcm.popContextData();
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()){
                      Tr.debug(tc, "Run WriteListenerRunnable done");
                  }
              }
          }
      }