diff --git a/SOPE/GDLContentStore/ChangeLog b/SOPE/GDLContentStore/ChangeLog index 296d55346..71b67f8dc 100644 --- a/SOPE/GDLContentStore/ChangeLog +++ b/SOPE/GDLContentStore/ChangeLog @@ -1,3 +1,9 @@ +2009-11-19 Wolfgang Sourdeau + + * GCSChannelManager.m (-releaseChannel:immediately:): new method + that enables the immediate release of channels, for handling + connection errors. + 2009-10-13 Wolfgang Sourdeau * GCSFolder.m (_tableRequirementForFields:andOrQualifier:): fixed diff --git a/SOPE/GDLContentStore/GCSChannelManager.h b/SOPE/GDLContentStore/GCSChannelManager.h index 1e8bae600..33aadaeb2 100644 --- a/SOPE/GDLContentStore/GCSChannelManager.h +++ b/SOPE/GDLContentStore/GCSChannelManager.h @@ -48,6 +48,8 @@ - (EOAdaptorChannel *)acquireOpenChannelForURL:(NSURL *)_url; - (void)releaseChannel:(EOAdaptorChannel *)_channel; +- (void)releaseChannel:(EOAdaptorChannel *)_channel + immediately:(BOOL)_immediately; /* checking for tables */ diff --git a/SOPE/GDLContentStore/GCSChannelManager.m b/SOPE/GDLContentStore/GCSChannelManager.m index ea5a8e7a9..bf0c6e93b 100644 --- a/SOPE/GDLContentStore/GCSChannelManager.m +++ b/SOPE/GDLContentStore/GCSChannelManager.m @@ -377,6 +377,12 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60; } - (void) releaseChannel: (EOAdaptorChannel *) _channel +{ + [self releaseChannel: _channel immediately: NO]; +} + +- (void) releaseChannel: (EOAdaptorChannel *) _channel + immediately: (BOOL) _immediately { GCSChannelHandle *handle; BOOL keepOpen; @@ -387,13 +393,14 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60; handle = [self findBusyChannelHandleForChannel: _channel]; if (handle) { - handle = [handle retain]; + [handle retain]; ASSIGN (handle->lastReleaseTime, [NSCalendarDate date]); [busyChannels removeObject: handle]; keepOpen = NO; - if ([_channel isOpen] && [handle age] < ChannelExpireAge) + if (!_immediately && [_channel isOpen] + && [handle age] < ChannelExpireAge) { keepOpen = YES; // TODO: consider age