[MediaContent] Fixed a bug of MediaData.ScanFolderAsync that could occur when the... 38/148938/1
authorcoderhyme <jhyo.kim@samsung.com>
Mon, 11 Sep 2017 07:19:52 +0000 (16:19 +0900)
committercoderhyme <jhyo.kim@samsung.com>
Mon, 11 Sep 2017 07:19:52 +0000 (16:19 +0900)
Change-Id: Iaf1c666ec3440bfdb4b6f7d1852f3312d81544c7
Signed-off-by: coderhyme <jhyo.kim@samsung.com>
src/Tizen.Content.MediaContent/Tizen.Content.MediaContent/MediaDatabase.cs

index c8676f7..8474364 100644 (file)
@@ -356,10 +356,9 @@ namespace Tizen.Content.MediaContent
         {
             var tcs = new TaskCompletionSource<bool>();
 
-            using (var cbKeeper = ObjectKeeper.Get(GetScanCompletedCallback(tcs)))
+            using (var cbKeeper = ObjectKeeper.Get(GetScanCompletedCallback(tcs, cancellationToken)))
             using (RegisterCancellationAction(tcs, folderPath, cancellationToken))
             {
-
                 Interop.Content.ScanFolder(folderPath, recursive, cbKeeper.Target)
                     .ThrowIfError("Failed to scan");
 
@@ -367,13 +366,21 @@ namespace Tizen.Content.MediaContent
             }
         }
 
-        private static Interop.Content.MediaScanCompletedCallback GetScanCompletedCallback(TaskCompletionSource<bool> tcs)
+        private static Interop.Content.MediaScanCompletedCallback GetScanCompletedCallback(TaskCompletionSource<bool> tcs,
+            CancellationToken cancellationToken)
         {
             return (scanResult, _) =>
             {
                 if (scanResult == MediaContentError.None)
                 {
-                    tcs.TrySetResult(true);
+                    if (cancellationToken.IsCancellationRequested)
+                    {
+                        tcs.TrySetCanceled();
+                    }
+                    else
+                    {
+                        tcs.TrySetResult(true);
+                    }
                 }
                 else
                 {
@@ -398,7 +405,6 @@ namespace Tizen.Content.MediaContent
                 }
 
                 Interop.Content.CancelScanFolder(folderPath).ThrowIfError("Failed to cancel scanning");
-                tcs.TrySetCanceled();
             });
         }