code: public boolean removeEventListener(IEventListener listener) {
          log.debug("removeEventListener - scope: {} {}", getName(), listener);
          if (log.isTraceEnabled()) {
              log.trace("Listeners - check #1: {}", listeners);
          }
          boolean removed = listeners.remove(listener);
          if (!keepOnDisconnect) {
              if (removed && keepAliveJobName == null) {
                  if (ScopeUtils.isRoom(this) && listeners.isEmpty()) {
                      // create job to kill the scope off if no listeners join within the delay
                      ISchedulingService schedulingService = (ISchedulingService) parent.getContext().getBean(ISchedulingService.BEAN_NAME);
                      // by default keep a scope around for a fraction of a second
                      keepAliveJobName = schedulingService.addScheduledOnceJob((keepDelay > 0 ? keepDelay * 1000 : 100), new KeepAliveJob(this));
                  }
              }
          } else {
              log.trace("Scope: {} is exempt from removal when empty", getName());
          }
          if (log.isTraceEnabled()) {
              log.trace("Listeners - check #2: {}", listeners);
          }
          return removed;
      }
docs: Remove event listener from list of listeners
  
  @param listener
  Listener to remove
  @return true if listener is removed and false otherwise