From 0e8eff792c7cd3c4289de8be84d2ab786f15abe9 Mon Sep 17 00:00:00 2001 From: rfm Date: Thu, 21 Nov 2013 16:45:01 +0000 Subject: [PATCH] revert git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@37391 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 7 ------- Source/GSFileHandle.m | 12 ++---------- Source/NSFileHandle.m | 32 ++++++++++++++++---------------- Source/win32/GSFileHandle.m | 5 ----- 4 files changed, 18 insertions(+), 38 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5bf0db290..911b55448 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,3 @@ -2013-11-21 Richard Frith-Macdonald - - * Source/GSFileHandle.m: Do an -sslDisconnect while finalising - (before underlying network connection is closed). - * Source/NSFileHandle.m: Add assertion to check that TLS has been - shut down by concrete subclass dealloc. - 2013-11-20 Richard Frith-Macdonald * Source/NSUserDefaults.m: Fix for bug 40620 diff --git a/Source/GSFileHandle.m b/Source/GSFileHandle.m index 6e898d5ca..02c63a0d4 100644 --- a/Source/GSFileHandle.m +++ b/Source/GSFileHandle.m @@ -214,7 +214,8 @@ static NSString* NotificationKey = @"NSFileHandleNotificationKey"; [self ignoreWriteDescriptor]; #if USE_ZLIB - /* The gzDescriptor should always be closed when we have done with it. + /* + * The gzDescriptor should always be closed when we have done with it. */ if (gzDescriptor != 0) { @@ -222,14 +223,6 @@ static NSString* NotificationKey = @"NSFileHandleNotificationKey"; gzDescriptor = 0; } #endif - - /* Ensure any SSL/TLS connection has been properly shut down. - */ - [self sslDisconnect]; - - /* Close file descriptor if necessary (setting correct non-blocking - * characteristics since we may have changed them). - */ if (descriptor != -1) { [self setNonBlocking: wasNonBlocking]; @@ -239,7 +232,6 @@ static NSString* NotificationKey = @"NSFileHandleNotificationKey"; descriptor = -1; } } - [super finalize]; } // Initializing a GSFileHandle Object diff --git a/Source/NSFileHandle.m b/Source/NSFileHandle.m index 2de11c55e..b4c583440 100644 --- a/Source/NSFileHandle.m +++ b/Source/NSFileHandle.m @@ -953,22 +953,29 @@ GSTLSHandlePush(gnutls_transport_ptr_t handle, const void *buffer, size_t len) - (void) closeFile { - [self sslDisconnect]; // Shut down TLS before closing socket + [self sslDisconnect]; [super closeFile]; } - (void) dealloc { - /* Any TLS connection needs to be shut down before the network connection - * is closed, which means that the concrete subclass must do that. - * Therefore, the session should be inactive by the time we get here. - */ - NSAssert(NO == [session active], NSInternalInconsistencyException); - DESTROY(session); - DESTROY(opts); + // TLS may need to read data during teardown, and we need to wait for it. + [self setNonBlocking: NO]; + // Don't DESTROY ivars below. First release them, then set nil, because + // `session' may need this back-reference during TLS teardown. + TEST_RELEASE(opts); + TEST_RELEASE(session); + opts = nil; + session = nil; [super dealloc]; } +- (void) finalize +{ + [self sslDisconnect]; + [super finalize]; +} + - (NSInteger) read: (void*)buf length: (NSUInteger)len { if (YES == [session active]) @@ -980,14 +987,7 @@ GSTLSHandlePush(gnutls_transport_ptr_t handle, const void *buffer, size_t len) - (void) sslDisconnect { - if (nil != session) - { - // TLS may need to read data during teardown, and we need to wait for it. - [self setNonBlocking: NO]; - [session disconnect]; - DESTROY(session); - } - DESTROY(opts); + [session disconnect]; } - (BOOL) sslHandshakeEstablished: (BOOL*)result outgoing: (BOOL)isOutgoing diff --git a/Source/win32/GSFileHandle.m b/Source/win32/GSFileHandle.m index ce830a065..a297c599d 100644 --- a/Source/win32/GSFileHandle.m +++ b/Source/win32/GSFileHandle.m @@ -270,11 +270,6 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin) gzclose(gzDescriptor); } #endif - - /* Ensure any SSL/TLS connection has been properly shut down. - */ - [self sslDisconnect]; - if (descriptor != -1) { [self setNonBlocking: wasNonBlocking];