Monotone-Parent: f845aee937de02ccc5aaec9e4f9592ddeea27abf

Monotone-Revision: 4e07b3d1e8330e5242ff10554013fd21551394d5

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2009-03-20T20:35:39
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2009-03-20 20:35:39 +00:00
parent c40475ab77
commit 59808b74b5
2 changed files with 12 additions and 3 deletions

View File

@ -6,6 +6,8 @@
valid. This fixes a crash because the channel, already
autoreleased, would be later released again by the caller (through
releaseChannel:).
([GCSChannelManager -releaseChannel:_channel]): ensure the channel
is closed if we need to release it.
2009-03-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>

View File

@ -379,6 +379,7 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60;
- (void) releaseChannel: (EOAdaptorChannel *) _channel
{
GCSChannelHandle *handle;
BOOL keepOpen;
#if defined(THREADSAFE)
[channelLock lock];
@ -391,8 +392,10 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60;
ASSIGN (handle->lastReleaseTime, [NSCalendarDate date]);
[busyChannels removeObject: handle];
keepOpen = NO;
if ([_channel isOpen] && [handle age] < ChannelExpireAge)
{
keepOpen = YES;
// TODO: consider age
[availableChannels addObject: handle];
if (debugPools)
@ -404,9 +407,13 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60;
_channel];
}
else if (debugPools)
[self logWithFormat:
@"DBPOOL: freeing old channel (age %ds, %p) ", (int)
[handle age], _channel];
{
[self logWithFormat:
@"DBPOOL: freeing old channel (age %ds, %p) ", (int)
[handle age], _channel];
}
if (!keepOpen && [_channel isOpen])
[_channel closeChannel];
[handle release];
}
else