Skip to content

Commit

Permalink
Merge pull request #3188 from vishalduggal/event_leak
Browse files Browse the repository at this point in the history
[TIMOB-11432] Properly retain release target proxies
  • Loading branch information
srahim committed Oct 12, 2012
2 parents b7fbff8 + 1b8d262 commit c8f8642
Showing 1 changed file with 14 additions and 3 deletions.
17 changes: 14 additions & 3 deletions iphone/Classes/TiBindingEvent.m
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,10 @@ void TiBindingEventFire(TiBindingEvent event)

int runloopcount = [targetProxy bindingRunLoopCount];

event->targetProxy = targetProxy;
if(event->targetProxy!=targetProxy){
[event->targetProxy release];
event->targetProxy = [targetProxy retain];
}
event->pendingEvents = runloopcount;
if (runloopcount == 1) { //Main case: One run loop.
TiBindingRunLoop ourRunLoop = [targetProxy primaryBindingRunLoop];
Expand All @@ -144,7 +147,11 @@ void TiBindingEventFire(TiBindingEvent event)
}

//Extreme edge case. Proxy thinks it still has listeners, but no run loops?!
event->targetProxy = TiBindingEventNextBubbleTargetProxy(event, targetProxy, YES);
TiProxy * newTarget = TiBindingEventNextBubbleTargetProxy(event, targetProxy, YES);
if(event->targetProxy!=newTarget){
[event->targetProxy release];
event->targetProxy = [newTarget retain];
}
TiBindingEventFire(event);
}

Expand Down Expand Up @@ -221,7 +228,11 @@ void TiBindingEventProcess(TiBindingRunLoop runloop, void * payload)
}

//Last one processing the event for this proxy, pass it on to the parent.
event->targetProxy = TiBindingEventNextBubbleTargetProxy(event, event->targetProxy, YES);
TiProxy * newTarget = TiBindingEventNextBubbleTargetProxy(event, event->targetProxy, YES);
if(event->targetProxy!=newTarget){
[event->targetProxy release];
event->targetProxy = [newTarget retain];
}
TiBindingEventFire(event);
//See who gets it next.

Expand Down

0 comments on commit c8f8642

Please sign in to comment.