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]