Felix Paul Kühne pushed to branch master at VideoLAN / VLC


Commits:
2476eb53 by Claudio Cambra at 2026-06-07T18:42:57+02:00
macosx: Clear out old observers before creating new ones

Avoids crash when attempting to re-create observers for same paths
Can happen when reconfiguring media folders

Signed-off-by: Claudio Cambra <[email protected]>

- - - - -


1 changed file:

- modules/gui/macosx/library/VLCLibraryModel.m


Changes:

=====================================
modules/gui/macosx/library/VLCLibraryModel.m
=====================================
@@ -910,25 +910,33 @@ static void libraryCallback(void *p_data, const 
vlc_ml_event_t *p_event)
 
         NSMutableArray * const mutableArray =
             [[NSMutableArray alloc] 
initWithCapacity:pp_entrypoints->i_nb_items];
-        NSMutableArray * const mutableObservers =
-            [[NSMutableArray alloc] 
initWithCapacity:pp_entrypoints->i_nb_items];
 
         for (size_t x = 0; x < pp_entrypoints->i_nb_items; x++) {
             VLCMediaLibraryEntryPoint * const entryPoint =
                 [[VLCMediaLibraryEntryPoint alloc] 
initWithEntryPoint:&pp_entrypoints->p_items[x]];
             if (entryPoint) {
                 [mutableArray addObject:entryPoint];
-
-                NSURL * const url = [NSURL URLWithString:entryPoint.MRL];
-                VLCMediaLibraryFolderObserver * const observer =
-                    [[VLCMediaLibraryFolderObserver alloc] initWithURL:url];
-                [mutableObservers addObject:observer];
             }
         }
 
         vlc_ml_folder_list_release(pp_entrypoints);
 
         dispatch_async(dispatch_get_main_queue(), ^{
+            // Stop old observers before creating new ones to avoid duplicate
+            // FSEvent streams for the same paths
+            self.folderObservers = nil;
+
+            NSMutableArray * const mutableObservers =
+                [[NSMutableArray alloc] initWithCapacity:mutableArray.count];
+            for (VLCMediaLibraryEntryPoint * const entryPoint in mutableArray) 
{
+                NSURL * const url = [NSURL URLWithString:entryPoint.MRL];
+                VLCMediaLibraryFolderObserver * const observer =
+                    [[VLCMediaLibraryFolderObserver alloc] initWithURL:url];
+                if (observer) {
+                    [mutableObservers addObject:observer];
+                }
+            }
+
             self.cachedListOfMonitoredFolders = mutableArray.copy;
             self.folderObservers = mutableObservers.copy;
             [self.changeDelegate 
notifyChange:VLCLibraryModelListOfMonitoredFoldersUpdated withObject:self];



View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/commit/2476eb53e76d650fbd85fc79f301637a600353c3

-- 
View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/commit/2476eb53e76d650fbd85fc79f301637a600353c3
You're receiving this email because of your account on code.videolan.org. 
Manage all notifications: https://code.videolan.org/-/profile/notifications | 
Help: https://code.videolan.org/help


_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to