From: Pierre d'Herbemont Date: Sat, 23 Feb 2008 22:14:13 +0000 (+0000) Subject: modules/gui/macosx.m: Make sure the module will terminate after a Ctrl-C from a term. X-Git-Tag: 0.9.0-test0~2552 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=f46398cfe28d8657c07aa9ad3e58f68a34d33303;p=vlc modules/gui/macosx.m: Make sure the module will terminate after a Ctrl-C from a term. --- diff --git a/modules/gui/macosx/intf.m b/modules/gui/macosx/intf.m index b1745acb1f..ac2261b3a6 100644 --- a/modules/gui/macosx/intf.m +++ b/modules/gui/macosx/intf.m @@ -124,6 +124,27 @@ void E_(CloseIntf) ( vlc_object_t *p_this ) free( p_intf->p_sys ); } +/***************************************************************************** + * KillerThread: Thread that kill the application + *****************************************************************************/ +static void * KillerThread( void *user_data ) +{ + NSAutoreleasePool * o_pool = [[NSAutoreleasePool alloc] init]; + + intf_thread_t *p_intf = user_data; + + vlc_object_lock ( p_intf ); + while( vlc_object_alive( p_intf ) ) + vlc_object_wait( p_intf ); + vlc_object_unlock( p_intf ); + + msg_Dbg( p_intf, "Killing the Mac OS X module\n" ); + + /* We are dead, terminate */ + [NSApp terminate: nil]; + [o_pool release]; + return NULL; +} /***************************************************************************** * Run: main loop *****************************************************************************/ @@ -157,6 +178,10 @@ static void Run( intf_thread_t *p_intf ) [[VLCMain sharedInstance] setIntf: p_intf]; [NSBundle loadNibNamed: @"MainMenu" owner: NSApp]; + /* Setup a thread that will monitor the module killing */ + pthread_t killer_thread; + pthread_create( &killer_thread, NULL, KillerThread, p_intf ); + /* Install a jmpbuffer to where we can go back before the NSApp exit * see applicationWillTerminate: */ if(setjmp(jmpbuffer) == 0)