omadrm/drmengine/dcfrepository/server/src/FileScan.cpp
changeset 84 b09186059647
parent 23 493788a4a8a4
--- a/omadrm/drmengine/dcfrepository/server/src/FileScan.cpp	Tue Sep 28 14:08:58 2010 +0300
+++ b/omadrm/drmengine/dcfrepository/server/src/FileScan.cpp	Thu Oct 14 13:45:23 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -121,6 +121,8 @@
 void CFileScan::ConstructL()
     {
     TInt err = 0;
+    CActiveScheduler::Add( this );
+
     if ( !iFs )
         {
         err = KErrArgument;
@@ -150,6 +152,7 @@
 // Destructor
 CFileScan::~CFileScan()
     {
+    Deque();
     CleanInternal();
     iServer = NULL;
     iFs = NULL;
@@ -196,8 +199,8 @@
 //
 void CFileScan::RunL()
     {
-    TInt err = KErrNone;
-    if ( iSearching && iServer->State()!=EStateIdle )
+    TInt err (iStatus.Int());
+    if ( !err && iSearching && iServer->State()!=EStateIdle )
         {
         err = SearchNext();
         if ( err == KErrCancel )
@@ -206,22 +209,29 @@
             }
         if ( !err )
             {
-            SetActive();
-            TRequestStatus* status = &iStatus;
-            User::RequestComplete( status , err );
+            if (iServer->State() != EStateIdle)
+                {
+                if (iSearching)
+                    {
+                    SetActive();
+                    TRequestStatus* status = &iStatus;
+                    User::RequestComplete(status, err);
+                    }
+                else
+                    {
+                    iServer->CompleteScanning(err);
+                    }
+                }
+            else
+                {
+                CleanInternal();
+                }
             }
         }
-    else
-        {
-        CleanInternal();
-        iServer->CompleteScanning(err);
-        Deque();
-        }
     if ( err )
         {
         CleanInternal();
         iServer->CompleteScanning(err);
-        Deque();
         }
     }
 
@@ -237,18 +247,19 @@
     {
     TInt err = KErrNone;
 
-    iServer = aServer;
-    CActiveScheduler::Add( this );
+    if ( IsActive() )
+        {
+        err=KErrServerBusy;
+        }
 
-    iSearching = ETrue;
-    err = SearchNext();
-    if ( err )
+    if ( !err )
         {
-        return err;
+        iServer = aServer;
+        iSearching = ETrue;
+        SetActive();
+        TRequestStatus* status = &iStatus;
+        User::RequestComplete( status , KErrNone );
         }
-    SetActive();
-    TRequestStatus* status = &iStatus;
-    User::RequestComplete( status , KErrNone );
     return err;
     }