vlc | branch: master | Felix Paul Kühne <[email protected]> | Wed Feb 15 15:37:12 2012 +0100| [cf8441a23c17e1f17feedfd8681f0d846cb7d19b] | committer: Felix Paul Kühne
macosx: make sure the interface doesn't leak any inputs. fixes crashes on quit after adding a file to the playlist > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=cf8441a23c17e1f17feedfd8681f0d846cb7d19b --- modules/gui/macosx/CoreInteraction.m | 26 ++++++++++++++++++++++---- modules/gui/macosx/MainWindow.m | 1 + modules/gui/macosx/controls.m | 7 ++++++- modules/gui/macosx/intf.m | 14 ++++++++++++-- 4 files changed, 41 insertions(+), 7 deletions(-) diff --git a/modules/gui/macosx/CoreInteraction.m b/modules/gui/macosx/CoreInteraction.m index 2044c42..d552f79 100644 --- a/modules/gui/macosx/CoreInteraction.m +++ b/modules/gui/macosx/CoreInteraction.m @@ -233,13 +233,22 @@ static VLCCoreInteraction *_o_sharedInstance = nil; if (!p_input) return nil; input_item_t *p_item = input_GetItem( p_input ); - if (!p_item) return nil; + if (!p_item) + { + vlc_object_release( p_input ); + return nil; + } char *psz_uri = input_item_GetURI( p_item ); - if (!psz_uri) return nil; + if (!psz_uri) + { + vlc_object_release( p_input ); + return nil; + } NSURL *o_url; o_url = [NSURL URLWithString:[NSString stringWithUTF8String:psz_uri]]; + vlc_object_release( p_input ); return o_url; } @@ -250,10 +259,18 @@ static VLCCoreInteraction *_o_sharedInstance = nil; if (!p_input) return nil; input_item_t *p_item = input_GetItem( p_input ); - if (!p_item) return nil; + if (!p_item) + { + vlc_object_release( p_input ); + return nil; + } char *psz_uri = input_item_GetURI( p_item ); - if (!psz_uri) return nil; + if (!psz_uri) + { + vlc_object_release( p_input ); + return nil; + } NSString *o_name; char *format = var_InheritString( VLCIntf, "input-title-format" ); @@ -272,6 +289,7 @@ static VLCCoreInteraction *_o_sharedInstance = nil; else o_name = [o_url absoluteString]; } + vlc_object_release( p_input ); return o_name; } diff --git a/modules/gui/macosx/MainWindow.m b/modules/gui/macosx/MainWindow.m index 5c9e4d2..e818b00 100644 --- a/modules/gui/macosx/MainWindow.m +++ b/modules/gui/macosx/MainWindow.m @@ -1042,6 +1042,7 @@ static VLCMainWindow *_o_sharedInstance = nil; [self setTitle: aString]; [o_fspanel setStreamTitle: aString]; + vlc_object_release( p_input ); } else { diff --git a/modules/gui/macosx/controls.m b/modules/gui/macosx/controls.m index bf40882..5e1517d 100644 --- a/modules/gui/macosx/controls.m +++ b/modules/gui/macosx/controls.m @@ -218,7 +218,11 @@ if( !p_input ) return; input_item_t *p_item = input_GetItem( p_input ); - if( !p_item ) return; + if( !p_item ) + { + vlc_object_release( p_input ); + return; + } char *path = input_item_GetURI( p_item ); if( !path ) path = strdup( "" ); @@ -247,6 +251,7 @@ [[[[openPanel URLs] objectAtIndex: i] path] UTF8String] ); } } + vlc_object_release( p_input ); } - (void)scrollWheel:(NSEvent *)theEvent diff --git a/modules/gui/macosx/intf.m b/modules/gui/macosx/intf.m index b0eba89..77f21c6 100644 --- a/modules/gui/macosx/intf.m +++ b/modules/gui/macosx/intf.m @@ -727,6 +727,13 @@ static VLCMain *_o_sharedMainInstance = nil; var_DelCallback(p_intf->p_libvlc, "intf-toggle-fscontrol", ShowController, self); var_DelCallback(p_intf->p_libvlc, "intf-show", ShowController, self); + input_thread_t * p_input = playlist_CurrentInput( p_playlist ); + if( p_input ) + { + var_DelCallback( p_input, "intf-event", InputEvent, [VLCMain sharedInstance] ); + vlc_object_release( p_input ); + } + /* remove global observer watching for vout device changes correctly */ [[NSNotificationCenter defaultCenter] removeObserver: self]; @@ -1352,8 +1359,9 @@ unsigned int CocoaKeyToVLC( unichar i_key ) if( p_input != NULL && [self activeVideoPlayback] ) { [o_mainwindow performSelectorOnMainThread:@selector(enterFullscreen) withObject:nil waitUntilDone:NO]; - vlc_object_release( p_input ); } + if (p_input) + vlc_object_release( p_input ); } else { @@ -1372,11 +1380,13 @@ unsigned int CocoaKeyToVLC( unichar i_key ) { var_AddCallback( p_input, "intf-event", InputEvent, [VLCMain sharedInstance] ); [o_mainmenu setRateControlsEnabled: YES]; - vlc_object_release( p_input ); } else [o_mainmenu setRateControlsEnabled: NO]; + if (p_input) + vlc_object_release( p_input ); + [o_playlist updateRowSelection]; [o_mainwindow updateWindow]; [self updateMainMenu]; _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
