code: private void processRequest(RequestEvent requestEvent) {
      Request request = requestEvent.getRequest();
  
      // check CSEQ# - if no higher than current CSEQ, discard message
  
      CSeqHeader rcvSeqHdr = (CSeqHeader) request.getHeader(CSeqHeader.NAME);
      if (rcvSeqHdr == null) {
        EventSubscriber.sendResponse(parent, requestEvent, SipResponse.BAD_REQUEST,
            "no CSEQ header received");
  
        String err = "*** NOTIFY REQUEST ERROR ***  (" + targetUri + ") - no CSEQ header received";
        synchronized (eventErrors) {
          eventErrors.addLast(err);
        }
        LOG.trace(err);
        return;
      }
  
      if (notifyCSeq != null) {
        // This is not the first NOTIFY
        if (rcvSeqHdr.getSeqNumber() <= notifyCSeq.getSeqNumber()) {
          EventSubscriber.sendResponse(parent, requestEvent, SipResponse.OK, "OK");
  
          LOG.trace("Received NOTIFY CSEQ {}  not new, discarding message", rcvSeqHdr.getSeqNumber());
          return;
        }
      }
  
      notifyCSeq = rcvSeqHdr;
  
      synchronized (this) {
        receivedRequests.addLast(new SipRequest(requestEvent));
        reqEvents.addLast(requestEvent);
        this.notify();
      }
    }
docs: synchronization