Hi,

I think either me or StandardSession.java are missing some
synchronization knowledge :-)

    /**
     * We are currently processing a session expiration, so bypass
     * certain IllegalStateException tests.  NOTE:  This value is not
     * included in the serialized version of this object.
     */
    protected transient boolean expiring = false;


    public void expire(boolean notify) {

        // Mark this session as "being expired" if needed
        if (expiring)
            return;

        synchronized (this) {

            if (manager == null)
                return;

            expiring = true;
....
...do a lot of stuff ...
            expiring = false;
     }
}


Correct me if I'm wrong, but if two threads come in simultaneously
into this method, wouldn't they both bypass the first check for
expiring==true and the synchronized block would be executed twice?
With the java memory model, is there a guarantee that the second
thread will see the version of 'expiring' which the first thread set,
without 'expiring' being declared volatile?
Shouldn't a check whether the session is already expired by a previous
call be added after the synchronized(this) statement?

regards
Leon


Alas, on a side note, shouldn't someone fix all the missing generics
in the code? I'd volunteer if the patch is welcome ;-)

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to