* GSWeb.framework/GSWSessionTimeOutManager.m/.h:

o changes for checkin/checkout code rewriting
		o set timer interval minimum to 5s instead of 1s


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gsweb/trunk@17029 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
mguesdon 2003-06-25 15:40:07 +00:00
parent 5d0fcc32b8
commit c564f0ad42
2 changed files with 97 additions and 38 deletions

View file

@ -48,8 +48,6 @@
#endif #endif
}; };
-(id)init;
-(void)dealloc;
-(void)updateTimeOutForSessionWithID:(NSString*)sessionID -(void)updateTimeOutForSessionWithID:(NSString*)sessionID
timeOut:(NSTimeInterval)timeOut; timeOut:(NSTimeInterval)timeOut;
-(void)handleTimer:(NSTimer*)timer; -(void)handleTimer:(NSTimer*)timer;
@ -60,6 +58,8 @@
target:(id)target; target:(id)target;
-(void)lock; -(void)lock;
-(void)unlock; -(void)unlock;
// Must not be locked
-(GSWSessionTimeOut*)sessionTimeOutForSessionID:(NSString*)sessionID;
@end @end
//==================================================================== //====================================================================

View file

@ -64,6 +64,54 @@ RCS_ID("$Id$")
[super dealloc]; [super dealloc];
}; };
// Must be locked
-(GSWSessionTimeOut*)_sessionTimeOutForSessionID:(NSString*)sessionID
{
GSWSessionTimeOut* sessionTimeOut=nil;
LOGObjectFnStart();
sessionTimeOut=[_sessionTimeOuts objectForKey:sessionID];
if (sessionTimeOut)
{
// Retain/autorelease it so it won't be destroyed too soon
RETAIN(sessionTimeOut);
AUTORELEASE(sessionTimeOut);
}
else
{
sessionTimeOut=[GSWSessionTimeOut timeOutWithSessionID:sessionID
lastAccessTime:[NSDate timeIntervalSinceReferenceDate]
sessionTimeOut:[GSWApplication sessionTimeOutValue]];
[_sessionTimeOuts setObject:sessionTimeOut
forKey:sessionID];
[_sessionOrderedTimeOuts addObject:sessionTimeOut];
};
LOGObjectFnStop();
return sessionTimeOut;
};
// Must not be locked
-(GSWSessionTimeOut*)sessionTimeOutForSessionID:(NSString*)sessionID
{
GSWSessionTimeOut* sessionTimeOut=nil;
LOGObjectFnStart();
[self lock];
NS_DURING
{
sessionTimeOut=[self _sessionTimeOutForSessionID:sessionID];
}
NS_HANDLER
{
NSLog(@"### exception ... %@", [localException reason]);
LOGException(@"%@ (%@)",localException,[localException reason]);
[self unlock];
[localException raise];
}
NS_ENDHANDLER;
[self unlock];
LOGObjectFnStop();
return sessionTimeOut;
};
//-------------------------------------------------------------------- //--------------------------------------------------------------------
-(void)updateTimeOutForSessionWithID:(NSString*)sessionID -(void)updateTimeOutForSessionWithID:(NSString*)sessionID
timeOut:(NSTimeInterval)timeOut timeOut:(NSTimeInterval)timeOut
@ -79,29 +127,18 @@ RCS_ID("$Id$")
NSTimer* timer=nil; NSTimer* timer=nil;
GSWSessionTimeOut* sessionTimeOut=nil; GSWSessionTimeOut* sessionTimeOut=nil;
NSDebugMLLog(@"sessions",@"timeOut=%ld",(long)timeOut); NSDebugMLLog(@"sessions",@"timeOut=%ld",(long)timeOut);
sessionTimeOut=[_sessionTimeOuts objectForKey:sessionID]; sessionTimeOut=[self _sessionTimeOutForSessionID:sessionID];
NSDebugMLLog(@"sessions",@"sessionTimeOut=%@",sessionTimeOut); NSDebugMLLog(@"sessions",@"sessionTimeOut=%@",sessionTimeOut);
NSDebugMLLog(@"sessions",@"self=%p _sessionOrderedTimeOuts %p=%@", NSDebugMLLog(@"sessions",@"self=%p _sessionOrderedTimeOuts %p=%@",
self,_sessionOrderedTimeOuts,_sessionOrderedTimeOuts); self,_sessionOrderedTimeOuts,_sessionOrderedTimeOuts);
if (sessionTimeOut) NSAssert(sessionTimeOut,@"No sessionTimeOut");
{
[sessionTimeOut retain]; [_sessionOrderedTimeOuts removeObject:sessionTimeOut];
[_sessionOrderedTimeOuts removeObject:sessionTimeOut]; [sessionTimeOut setLastAccessTime:[NSDate timeIntervalSinceReferenceDate]];
[sessionTimeOut setLastAccessTime:[NSDate timeIntervalSinceReferenceDate]]; if (timeOut!=[sessionTimeOut sessionTimeOut])
if (timeOut!=[sessionTimeOut sessionTimeOut]) [sessionTimeOut setSessionTimeOut:timeOut];
[sessionTimeOut setSessionTimeOut:timeOut]; [_sessionOrderedTimeOuts addObject:sessionTimeOut];
[_sessionOrderedTimeOuts addObject:sessionTimeOut];
[sessionTimeOut release];
}
else
{
sessionTimeOut=[GSWSessionTimeOut timeOutWithSessionID:sessionID
lastAccessTime:[NSDate timeIntervalSinceReferenceDate]
sessionTimeOut:timeOut];
[_sessionTimeOuts setObject:sessionTimeOut
forKey:sessionID];
[_sessionOrderedTimeOuts addObject:sessionTimeOut];
};
NSDebugMLLog(@"sessions",@"self=%p sessionOrderedTimeOuts %p=%@", NSDebugMLLog(@"sessions",@"self=%p sessionOrderedTimeOuts %p=%@",
self,_sessionOrderedTimeOuts,_sessionOrderedTimeOuts); self,_sessionOrderedTimeOuts,_sessionOrderedTimeOuts);
NSDebugMLLog(@"sessions",@"sessionTimeOut=%@",sessionTimeOut); NSDebugMLLog(@"sessions",@"sessionTimeOut=%@",sessionTimeOut);
@ -239,24 +276,34 @@ RCS_ID("$Id$")
[_target unlock]; [_target unlock];
targetLocked=NO; targetLocked=NO;
NSDebugMLLog(@"sessions",@"session=%@",session); NSDebugMLLog(@"sessions",@"session=%p",session);
NSLog(@"%s %d GSWSessionTimeOutMananger : before removeObject sessionID=%@ session = %p",
__FILE__,__LINE__,[sessionTimeOut sessionID],session);
if (sessionTimeOut)
{
// Remove sessionTimeOut anyway
[_sessionTimeOuts removeObjectForKey:[sessionTimeOut sessionID]];
//NSLog(@"%d %d removed from _sessionTimeOuts",__FILE__,__LINE__);
[_sessionOrderedTimeOuts removeObject:sessionTimeOut];
//NSLog(@"%s %d removed from _sessionOrderedTimeOuts",__FILE__,__LINE__);
};
NSDebugMLLog(@"sessions",@"self=%p sessionOrderedTimeOuts %p=%@",
self,_sessionOrderedTimeOuts,_sessionOrderedTimeOuts);
removedNb++;
if (session) if (session)
{ {
//NSLog(@"%s %d will terminate session",__FILE__,__LINE__);
NSDebugMLLog(@"sessions",@"self=%p sessionOrderedTimeOuts %p=%@", NSDebugMLLog(@"sessions",@"self=%p sessionOrderedTimeOuts %p=%@",
self,_sessionOrderedTimeOuts,_sessionOrderedTimeOuts); self,_sessionOrderedTimeOuts,_sessionOrderedTimeOuts);
[session terminate]; [session _terminateByTimeout];
NSDebugMLLog(@"sessions",@"self=%p sessionOrderedTimeOuts %p=%@", NSDebugMLLog(@"sessions",@"self=%p sessionOrderedTimeOuts %p=%@",
self,_sessionOrderedTimeOuts,_sessionOrderedTimeOuts); self,_sessionOrderedTimeOuts,_sessionOrderedTimeOuts);
NSLog(@"GSWSessionTimeOutMananger : removeObject = %@", sessionTimeOut); //NSLog(@"%s %d session terminated",__FILE__,__LINE__);
/* [_sessionOrderedTimeOuts removeObjectAtIndex:0]; */
[_sessionOrderedTimeOuts removeObject:sessionTimeOut];
[_sessionTimeOuts removeObjectForKey:[session sessionID]];
NSDebugMLLog(@"sessions",@"self=%p sessionOrderedTimeOuts %p=%@",
self,_sessionOrderedTimeOuts,_sessionOrderedTimeOuts);
removedNb++;
/* /*
if ([sessionOrderedTimeOuts count]>0) if ([sessionOrderedTimeOuts count]>0)
_sessionTimeOut=[sessionOrderedTimeOuts objectAtIndex:0]; _sessionTimeOut=[sessionOrderedTimeOuts objectAtIndex:0];
@ -334,6 +381,7 @@ RCS_ID("$Id$")
NSDebugMLLog(@"sessions",@"self=%p sessionOrderedTimeOuts %p=%@", NSDebugMLLog(@"sessions",@"self=%p sessionOrderedTimeOuts %p=%@",
self,_sessionOrderedTimeOuts,_sessionOrderedTimeOuts); self,_sessionOrderedTimeOuts,_sessionOrderedTimeOuts);
//NSLog(@"%s %d [_sessionOrderedTimeOuts count]=%d",__FILE__,__LINE__,[_sessionOrderedTimeOuts count]);
if ([_sessionOrderedTimeOuts count]>0) if ([_sessionOrderedTimeOuts count]>0)
{ {
NSEnumerator* sessionOrderedTimeOutsEnum = [_sessionOrderedTimeOuts objectEnumerator]; NSEnumerator* sessionOrderedTimeOutsEnum = [_sessionOrderedTimeOuts objectEnumerator];
@ -359,6 +407,14 @@ RCS_ID("$Id$")
NSDebugMLLog(@"sessions",@"[_timer fireDate]=%@",[_timer fireDate]); NSDebugMLLog(@"sessions",@"[_timer fireDate]=%@",[_timer fireDate]);
NSDebugMLLog(@"sessions",@"[old timer isValide]=%s", NSDebugMLLog(@"sessions",@"[old timer isValide]=%s",
[_timer isValid] ? "YES" : "NO"); [_timer isValid] ? "YES" : "NO");
/*
NSLog(@"%s %d sessionTimeOut=%@ [_timer fireDate]=%@ [old timer isValid]=%s timerFireTimeInterval=%d now=%d",
__FILE__,__LINE__,
sessionTimeOut,[_timer fireDate],
([_timer isValid] ? "YES" : "NO"),
(int)timerFireTimeInterval,
(int)now);
*/
if (sessionTimeOut if (sessionTimeOut
&& (![_timer isValid] && (![_timer isValid]
|| [sessionTimeOut timeOutTime]<timerFireTimeInterval || [sessionTimeOut timeOutTime]<timerFireTimeInterval
@ -367,10 +423,13 @@ RCS_ID("$Id$")
NSTimeInterval timerTimeInterval=[sessionTimeOut timeOutTime]-now; NSTimeInterval timerTimeInterval=[sessionTimeOut timeOutTime]-now;
NSDebugMLLog(@"sessions",@"timerTimeInterval=%ld",(long)timerTimeInterval); NSDebugMLLog(@"sessions",@"timerTimeInterval=%ld",(long)timerTimeInterval);
timerTimeInterval=max(timerTimeInterval,1);//20s minimum timerTimeInterval=max(timerTimeInterval,5);//5s minimum
NSDebugMLLog(@"sessions",@"timerTimeInterval=%ld",(long)timerTimeInterval); NSDebugMLLog(@"sessions",@"timerTimeInterval=%ld",(long)timerTimeInterval);
NSLog(@"new timerTimeInterval=%ld",(long)timerTimeInterval); /*
NSLog(@"%s %d new timerTimeInterval=%ld for sessionTimeOut: %@",
__FILE__,__LINE__,
(long)timerTimeInterval,sessionTimeOut);
*/
newTimer=[NSTimer timerWithTimeInterval:timerTimeInterval newTimer=[NSTimer timerWithTimeInterval:timerTimeInterval
target:self target:self
selector:@selector(handleTimer:) selector:@selector(handleTimer:)
@ -474,7 +533,7 @@ RCS_ID("$Id$")
{ {
NSTimer* newTimer = nil; NSTimer* newTimer = nil;
NSLog(@"---Start startHandleTimerRefusingSessions"); //NSLog(@"---Start startHandleTimerRefusingSessions");
//[GSWApplication statusLogWithFormat:@"Start startHandleTimerRefusingSessions"]; //[GSWApplication statusLogWithFormat:@"Start startHandleTimerRefusingSessions"];
//LOGObjectFnStart(); //LOGObjectFnStart();
[self lock]; [self lock];
@ -498,7 +557,7 @@ RCS_ID("$Id$")
[self unlock]; [self unlock];
//LOGObjectFnStop(); //LOGObjectFnStop();
//[GSWApplication statusLogWithFormat:@"Stop startHandleTimerRefusingSessions"]; //[GSWApplication statusLogWithFormat:@"Stop startHandleTimerRefusingSessions"];
NSLog(@"---Stop startHandleTimerRefusingSessions"); //NSLog(@"---Stop startHandleTimerRefusingSessions");
} }
//-------------------------------------------------------------------- //--------------------------------------------------------------------
@ -578,7 +637,7 @@ RCS_ID("$Id$")
NSDebugMLLog(@"sessions",@"self=%p sessionOrderedTimeOuts %p=%@", NSDebugMLLog(@"sessions",@"self=%p sessionOrderedTimeOuts %p=%@",
self,_sessionOrderedTimeOuts,_sessionOrderedTimeOuts); self,_sessionOrderedTimeOuts,_sessionOrderedTimeOuts);
NSLog(@"GSWSessionTimeOutMananger : removeObject = %@", sessionTimeOut); //NSLog(@"GSWSessionTimeOutMananger : removeObject = %@", sessionTimeOut);
[_sessionOrderedTimeOuts removeObject:sessionTimeOut]; [_sessionOrderedTimeOuts removeObject:sessionTimeOut];
[_sessionTimeOuts removeObjectForKey:[session sessionID]]; [_sessionTimeOuts removeObjectForKey:[session sessionID]];