<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -123,15 +123,21 @@ void LFHRReadStreamClientCallBack(CFReadStreamRef stream, CFStreamEventType even
         _readBuffer = NULL;
     }
     
-    [super finalize];    
+    [super finalize];
+}
+
+
+- (void)_exitRunLoop
+{
+	NSPortMessage *message = [[[NSPortMessage alloc] initWithSendPort:_synchronousMessagePort receivePort:_synchronousMessagePort components:nil] autorelease];
+	[message setMsgid:0];
+	[message sendBeforeDate:[NSDate date]];
 }
 
 - (void)handleTimeout
 {
 	if (_shouldWaitUntilDone) {
-		NSPortMessage *message = [[[NSPortMessage alloc] initWithSendPort:_synchronousMessagePort receivePort:_synchronousMessagePort components:nil] autorelease];
-		[message setMsgid:0];
-		[message sendBeforeDate:[NSDate date]];
+		[self _exitRunLoop];
 	}
 
     [self cleanUp];
@@ -575,18 +581,26 @@ void LFHRReadStreamClientCallBack(CFReadStreamRef stream, CFStreamEventType even
 			currentMode = NSDefaultRunLoopMode;
 		}
 
-		NSAssert(!_synchronousMessagePort, @&quot;_synchronousMessagePort should be nil when this part of code is entered&quot;);
-		_synchronousMessagePort = [[NSPort port] retain];
+		BOOL isReentrant = (_synchronousMessagePort != nil);
 
-		[currentRunLoop addPort:_synchronousMessagePort forMode:currentMode];
+		if (!isReentrant) {
+			_synchronousMessagePort = [[NSPort port] retain];
+			[currentRunLoop addPort:_synchronousMessagePort forMode:currentMode];
+		}
 
         while ([self isRunning]) {
             [currentRunLoop runMode:currentMode beforeDate:[NSDate distantFuture]];
         }
 
-		[currentRunLoop removePort:_synchronousMessagePort forMode:currentMode];
-		[_synchronousMessagePort release];
-		_synchronousMessagePort = nil;
+		if (!isReentrant) {
+			[currentRunLoop removePort:_synchronousMessagePort forMode:currentMode];
+			[_synchronousMessagePort release];
+			_synchronousMessagePort = nil;
+		}
+		else {
+			// sends another message to exit the runloop
+			[self _exitRunLoop];
+		}
     }
 
     return YES;</diff>
      <filename>LFWebAPIKit/LFHTTPRequest.m</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>619150d6b3a8e9e48efa1cda3782614297f2d105</id>
    </parent>
    <parent>
      <id>96bd89a548af5e29ded07c9e1ff4b0a620638693</id>
    </parent>
  </parents>
  <author>
    <name>Lukhnos D. Liu</name>
    <email>lukhnos@lithoglyph.com</email>
  </author>
  <url>http://github.com/lukhnos/objectiveflickr/commit/d1cfaf6c57acb4133130c7dd153ef404e6988d2b</url>
  <id>d1cfaf6c57acb4133130c7dd153ef404e6988d2b</id>
  <committed-date>2009-10-21T07:30:38-07:00</committed-date>
  <authored-date>2009-10-21T07:30:38-07:00</authored-date>
  <message>Merge branch 'master' of github.com:lukhnos/objectiveflickr</message>
  <tree>6406c3a28ec25dfed93b5bb872cf4de6b98d4bdb</tree>
  <committer>
    <name>Lukhnos D. Liu</name>
    <email>lukhnos@lithoglyph.com</email>
  </committer>
</commit>
