Commit 73317f34 authored by Pierre d'Herbemont's avatar Pierre d'Herbemont

Mac OS X gui: Make sure libvlc exit properly. Don't forward the closeVout: if...

Mac OS X gui: Make sure libvlc exit properly. Don't forward the closeVout: if the interface is dead.
parent 9180f067
...@@ -105,6 +105,8 @@ void E_(CloseIntf) ( vlc_object_t *p_this ) ...@@ -105,6 +105,8 @@ void E_(CloseIntf) ( vlc_object_t *p_this )
/***************************************************************************** /*****************************************************************************
* Run: main loop * Run: main loop
*****************************************************************************/ *****************************************************************************/
jmp_buf jmpbuffer;
static void Run( intf_thread_t *p_intf ) static void Run( intf_thread_t *p_intf )
{ {
/* Do it again - for some unknown reason, vlc_thread_create() often /* Do it again - for some unknown reason, vlc_thread_create() often
...@@ -113,6 +115,10 @@ static void Run( intf_thread_t *p_intf ) ...@@ -113,6 +115,10 @@ static void Run( intf_thread_t *p_intf )
vlc_thread_set_priority( p_intf, VLC_THREAD_PRIORITY_LOW ); vlc_thread_set_priority( p_intf, VLC_THREAD_PRIORITY_LOW );
[[VLCMain sharedInstance] setIntf: p_intf]; [[VLCMain sharedInstance] setIntf: p_intf];
[NSBundle loadNibNamed: @"MainMenu" owner: NSApp]; [NSBundle loadNibNamed: @"MainMenu" owner: NSApp];
/* Install a jmpbuffer to where we can go back before the NSApp exit
* see applicationWillTerminate: */
if(setjmp(jmpbuffer) == 0)
[NSApp run]; [NSApp run];
} }
...@@ -1544,14 +1550,6 @@ static VLCMain *_o_sharedMainInstance = nil; ...@@ -1544,14 +1550,6 @@ static VLCMain *_o_sharedMainInstance = nil;
vout_thread_t * p_vout; vout_thread_t * p_vout;
int returnedValue = 0; int returnedValue = 0;
#define p_input p_intf->p_sys->p_input
if( p_input )
{
vlc_object_release( p_input );
p_input = NULL;
}
#undef p_input
/* Stop playback */ /* Stop playback */
p_playlist = pl_Yield( p_intf ); p_playlist = pl_Yield( p_intf );
playlist_Stop( p_playlist ); playlist_Stop( p_playlist );
...@@ -1574,6 +1572,14 @@ static VLCMain *_o_sharedMainInstance = nil; ...@@ -1574,6 +1572,14 @@ static VLCMain *_o_sharedMainInstance = nil;
p_intf->b_interaction = VLC_FALSE; p_intf->b_interaction = VLC_FALSE;
var_DelCallback( p_intf, "interaction", InteractCallback, self ); var_DelCallback( p_intf, "interaction", InteractCallback, self );
#define p_input p_intf->p_sys->p_input
if( p_input )
{
vlc_object_release( p_input );
p_input = NULL;
}
#undef p_input
/* remove global observer watching for vout device changes correctly */ /* remove global observer watching for vout device changes correctly */
[[NSNotificationCenter defaultCenter] removeObserver: self [[NSNotificationCenter defaultCenter] removeObserver: self
name: NSApplicationDidChangeScreenParametersNotification name: NSApplicationDidChangeScreenParametersNotification
...@@ -1646,8 +1652,13 @@ static VLCMain *_o_sharedMainInstance = nil; ...@@ -1646,8 +1652,13 @@ static VLCMain *_o_sharedMainInstance = nil;
[[NSUserDefaults standardUserDefaults] synchronize]; [[NSUserDefaults standardUserDefaults] synchronize];
p_intf->b_die = VLC_TRUE; p_intf->b_die = VLC_TRUE;
/* Go back to Run() and make libvlc exit properly */
longjmp( jmpbuffer, 1 );
/* not reached */
} }
- (IBAction)clearRecentItems:(id)sender - (IBAction)clearRecentItems:(id)sender
{ {
[[NSDocumentController sharedDocumentController] [[NSDocumentController sharedDocumentController]
......
...@@ -200,7 +200,7 @@ void E_(CloseVideoGL) ( vlc_object_t * p_this ) ...@@ -200,7 +200,7 @@ void E_(CloseVideoGL) ( vlc_object_t * p_this )
{ {
aglDestroyContext(p_vout->p_sys->agl_ctx); aglDestroyContext(p_vout->p_sys->agl_ctx);
} }
else else if(!VLCIntf->b_die)
{ {
NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init]; NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment