@@ -67,9 +67,9 @@ @interface RMQConnection ()
6767@property (nonatomic , readwrite ) id <RMQFrameHandler> frameHandler;
6868@property (nonatomic , readwrite ) id <RMQLocalSerialQueue> commandQueue;
6969@property (nonatomic , readwrite ) id <RMQWaiterFactory> waiterFactory;
70- @property (nonatomic , readwrite ) id <RMQHeartbeatSender> heartbeatSender;
70+ @property (nonatomic , weak , readwrite ) id <RMQHeartbeatSender> heartbeatSender;
7171@property (nonatomic , weak , readwrite ) id <RMQConnectionDelegate> delegate;
72- @property (nonatomic , readwrite ) id <RMQChannel> channelZero;
72+ @property (nonatomic , weak , readwrite ) id <RMQChannel> channelZero;
7373@property (nonatomic , readwrite ) RMQConnectionConfig *config;
7474@property (nonatomic , readwrite ) NSMutableDictionary *userChannels;
7575@property (nonatomic , readwrite ) NSNumber *frameMax;
@@ -559,22 +559,24 @@ - (void)start:(void (^)(void))completionHandler {
559559 [self .delegate connection: self failedToConnectWithError: connectError];
560560 } else {
561561 [self .transport write: [RMQProtocolHeader new ].amqEncoded];
562+ __weak id this = self;
562563
563564 [self .commandQueue enqueue: ^{
564- id <RMQWaiter> handshakeCompletion = [self .waiterFactory makeWithTimeout: self .handshakeTimeout];
565+ __strong typeof (self) strongThis = this;
566+ id <RMQWaiter> handshakeCompletion = [strongThis.waiterFactory makeWithTimeout: strongThis.handshakeTimeout];
565567
566- RMQHandshaker *handshaker = [[RMQHandshaker alloc ] initWithSender: self
567- config: self .config
568+ RMQHandshaker *handshaker = [[RMQHandshaker alloc ] initWithSender: strongThis
569+ config: strongThis .config
568570 completionHandler: ^(NSNumber *heartbeatTimeout,
569571 RMQTable *serverProperties) {
570- [self .heartbeatSender startWithInterval: @(heartbeatTimeout.integerValue / 2 )];
571- self .handshakeComplete = YES ;
572+ [strongThis .heartbeatSender startWithInterval: @(heartbeatTimeout.integerValue / 2 )];
573+ strongThis .handshakeComplete = YES ;
572574 [handshakeCompletion done ];
573- [self .reader run ];
574- self .serverProperties = serverProperties;
575+ [strongThis .reader run ];
576+ strongThis .serverProperties = serverProperties;
575577 completionHandler ();
576578 }];
577- RMQReader *handshakeReader = [[RMQReader alloc ] initWithTransport: self .transport
579+ RMQReader *handshakeReader = [[RMQReader alloc ] initWithTransport: strongThis .transport
578580 frameHandler: handshaker];
579581 handshaker.reader = handshakeReader;
580582 [handshakeReader run ];
@@ -583,7 +585,7 @@ - (void)start:(void (^)(void))completionHandler {
583585 NSError *error = [NSError errorWithDomain: RMQErrorDomain
584586 code: RMQErrorConnectionHandshakeTimedOut
585587 userInfo: @{NSLocalizedDescriptionKey : @" Handshake timed out." }];
586- [self .delegate connection: self failedToConnectWithError: error];
588+ [strongThis .delegate connection: strongThis failedToConnectWithError: error];
587589 }
588590 }];
589591 }
@@ -704,7 +706,16 @@ - (NSArray *)closeOperationsWithoutBlock {
704706 ^{[self .heartbeatSender stop ];},
705707 ^{
706708 self.transport .delegate = nil ;
709+ [self .transport cleanup ];
707710 [self .transport close ];
711+ },
712+ ^{
713+ [self .channelAllocator cleanupOnClose ];
714+ self.channelAllocator = nil ;
715+ },
716+ ^{
717+ self.reader = nil ;
718+ self.frameHandler = nil ;
708719 }];
709720}
710721
@@ -716,7 +727,16 @@ - (NSArray *)closeOperations {
716727 ^{[self .heartbeatSender stop ];},
717728 ^{
718729 self.transport .delegate = nil ;
730+ [self .transport cleanup ];
719731 [self .transport close ];
732+ },
733+ ^{
734+ [self .channelAllocator cleanupOnClose ];
735+ self.channelAllocator = nil ;
736+ },
737+ ^{
738+ self.reader = nil ;
739+ self.frameHandler = nil ;
720740 }];
721741}
722742
0 commit comments