@Override
 public void run() {
   try {
     while (true) {
       Request request = submittedRequests.take();
       long traceMask = ZooTrace.CLIENT_REQUEST_TRACE_MASK;
       if (request.type == OpCode.ping) {
         traceMask = ZooTrace.CLIENT_PING_TRACE_MASK;
       }
       if (LOG.isTraceEnabled()) {
         ZooTrace.logRequest(LOG, traceMask, 'P', request, "");
       }
       if (Request.requestOfDeath == request) {
         break;
       }
       pRequest(request);
     }
   } catch (InterruptedException e) {
     LOG.error("Unexpected interruption", e);
   } catch (RequestProcessorException e) {
     if (e.getCause() instanceof XidRolloverException) {
       LOG.info(e.getCause().getMessage());
     }
     LOG.error("Unexpected exception", e);
   } catch (Exception e) {
     LOG.error("Unexpected exception", e);
   }
   LOG.info("PrepRequestProcessor exited loop!");
 }