MacOSX/Framework/VLCEventManager.m: Directly issue events to main thread if we are...
authorPierre d'Herbemont <pdherbemont@videolan.org>
Wed, 19 Dec 2007 22:50:14 +0000 (22:50 +0000)
committerPierre d'Herbemont <pdherbemont@videolan.org>
Wed, 19 Dec 2007 22:50:14 +0000 (22:50 +0000)
extras/MacOSX/Framework/Sources/VLCEventManager.m

index 4bdc7ef..9d01467 100644 (file)
@@ -98,9 +98,9 @@ static void * EventDispatcherMainLoop(void * user_data)
         pthread_mutex_unlock( [self queueLock] );
         
         if( message->type == VLCNotification )
-            [self performSelectorOnMainThread:@selector(callDelegateOfObjectAndSendNotificationWithArgs:) withObject:[dataMessage retain] waitUntilDone: NO];
+            [self performSelectorOnMainThread:@selector(callDelegateOfObjectAndSendNotificationWithArgs:) withObject:[dataMessage retain]  /* released in the call */ waitUntilDone: NO];
         else
-            [self performSelectorOnMainThread:@selector(callObjectMethodWithArgs:) withObject:[dataMessage retain] waitUntilDone: NO];
+            [self performSelectorOnMainThread:@selector(callObjectMethodWithArgs:) withObject:[dataMessage retain]  /* released in the call */ waitUntilDone: NO];
 
         pthread_mutex_lock( [self queueLock] );
         [[self messageQueue] removeLastObject];
@@ -155,7 +155,13 @@ static void * EventDispatcherMainLoop(void * user_data)
         [aNotificationName retain], 
         VLCNotification 
     };
-    
+
+    if([NSThread isMainThread])
+    {
+        [self callDelegateOfObjectAndSendNotificationWithArgs:[[NSData dataWithBytes:&message length:sizeof(struct message)] retain] /* released in the call */];
+        return;
+    }
+
     pthread_mutex_lock( [self queueLock] );
     [[self messageQueue] insertObject:[NSData dataWithBytes:&message length:sizeof(struct message)] atIndex:0];
     pthread_cond_signal( [self signalData] );
@@ -167,7 +173,6 @@ static void * EventDispatcherMainLoop(void * user_data)
 - (void)callOnMainThreadObject:(id)aTarget withMethod:(SEL)aSelector withArgumentAsObject: (id)arg
 {
     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
-
     struct message message = 
     { 
         [aTarget retain], 
@@ -175,6 +180,12 @@ static void * EventDispatcherMainLoop(void * user_data)
         [arg retain], 
         VLCObjectMethodWithObjectArg 
     };
+
+    if([NSThread isMainThread])
+    {
+        [self callObjectMethodWithArgs:[[NSData dataWithBytes:&message length:sizeof(struct message)] retain] /* released in the call */];
+        return;
+    }
     
     pthread_mutex_lock( [self queueLock] );
     [[self messageQueue] insertObject:[NSData dataWithBytes:&message length:sizeof(struct message)] atIndex:0];