From 59808b74b529472e48f8eac339aa018f8cd78ffd Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 20 Mar 2009 20:35:39 +0000 Subject: [PATCH] Monotone-Parent: f845aee937de02ccc5aaec9e4f9592ddeea27abf Monotone-Revision: 4e07b3d1e8330e5242ff10554013fd21551394d5 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2009-03-20T20:35:39 Monotone-Branch: ca.inverse.sogo --- SOPE/GDLContentStore/ChangeLog | 2 ++ SOPE/GDLContentStore/GCSChannelManager.m | 13 ++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/SOPE/GDLContentStore/ChangeLog b/SOPE/GDLContentStore/ChangeLog index 7c787ff69..2aa397409 100644 --- a/SOPE/GDLContentStore/ChangeLog +++ b/SOPE/GDLContentStore/ChangeLog @@ -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 diff --git a/SOPE/GDLContentStore/GCSChannelManager.m b/SOPE/GDLContentStore/GCSChannelManager.m index 1c51def65..ea5a8e7a9 100644 --- a/SOPE/GDLContentStore/GCSChannelManager.m +++ b/SOPE/GDLContentStore/GCSChannelManager.m @@ -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