docs: public void unlockSession(HttpSession sess) {
        if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled()&&LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
            LoggingUtil.SESSION_LOGGER_CORE.entering(methodClassName, methodNames[UNLOCK_SESSION]);
        }
        SessionData session= (SessionData)sess;
        Object obj = session.getSessionLock(Thread.currentThread());
        if (obj!=null) {
            LinkedList linkList = session.getLockList();
            synchronized(linkList) {
                try {
                    linkList.remove(obj);
                    if (linkList.size()>0) {
                        Object nextLock = linkList.getFirst();
                        if (nextLock !=null) {
                            if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled()&&LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
                                LoggingUtil.SESSION_LOGGER_CORE.logp(Level.FINE, methodClassName, methodNames[UNLOCK_SESSION], "notify after postInvoke");
                            }
                            synchronized(nextLock) {
                                nextLock.notify();
                            }
                        }
                    } else {
                        session.clearSessionLocks();
                    }
                } catch (Exception e) {
                    if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled()&&LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
                        LoggingUtil.SESSION_LOGGER_CORE.logp(Level.FINE, methodClassName, methodNames[UNLOCK_SESSION], "failed to unlock session", e);
                    }
                }
            }
        }                   
        if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled()&&LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
            LoggingUtil.SESSION_LOGGER_CORE.exiting(methodClassName, methodNames[UNLOCK_SESSION]);
        }
    }