userlibandfileserver/fileserver/shostmassstorage/server/src/cusbhostmssession.cpp
changeset 31 56f325a607ea
parent 0 a41df078684a
child 33 0173bcd7697c
--- a/userlibandfileserver/fileserver/shostmassstorage/server/src/cusbhostmssession.cpp	Mon Dec 21 16:14:42 2009 +0000
+++ b/userlibandfileserver/fileserver/shostmassstorage/server/src/cusbhostmssession.cpp	Wed Dec 23 11:43:31 2009 +0000
@@ -19,10 +19,8 @@
 */
 
 #include <e32base.h>
-#include <e32base_private.h>
-#include <e32property.h>
+
 #include "msctypes.h"
-#include "mscutils.h"
 #include "shared.h"
 #include "msgservice.h"
 #include "cusbhostmslogicalunit.h"
@@ -59,7 +57,6 @@
 	: iUsbHostMsServer(aServer)
 	{
     __MSFNLOG
-	iMsgCount = 0;
 	}
 
 
@@ -121,10 +118,9 @@
 	case EUsbHostMsFinalCleanup:
 		if(iDeviceThread->IsActive())
 			{
-			TRequestStatus* s=&iDeviceThread->iStatus;
-			iThread.RequestComplete(s, KErrSessionClosed);
+			iThread.RequestComplete(iClientStatus, KErrSessionClosed);
 			}
-		iDeviceThread->Cancel();
+	
 		delete iDeviceThread;
 		iThread.Kill(KErrNone);
 		aMessage.Complete(KErrNone);
@@ -133,53 +129,41 @@
 		break;
 		}
 
-	__HOSTPRINT1(_L("Queuing %d message"), ++iMsgCount);
 	__ASSERT_DEBUG(iDeviceThread != NULL, User::Panic(KUsbMsHostPanicCat, EDeviceThreadDoesNotExist));
 
 	r = iDeviceThread->QueueMsg(aMessage);
-	if(r != KErrNone)
+	if (r != KErrNone)
 		{
 		aMessage.Complete(r);
 		return;
 		}
 
-	if(iDeviceThread->IsActive())
+	if (iClientStatus && *iClientStatus == KRequestPending)
 		{
-		iDeviceThread->Lock();
-		if(iDeviceThread->iIsSignalled)
-			{
-			iDeviceThread->Unlock();
-			return;
-			}
-		iDeviceThread->iIsSignalled = ETrue;
-		iDeviceThread->Unlock();
 		__HOSTPRINT(_L("Signaling device thread to handle message"));
-		TRequestStatus* s=&iDeviceThread->iStatus;
-		iThread.RequestComplete(s, KErrNone);
+		iThread.RequestComplete(iClientStatus, KErrNone);
 		}
 	}
 
 
 void CUsbHostMsSession::CreateDeviceThreadL(const RMessage2& aMessage)
 	{
+    __MSFNLOG
 	THostMassStorageConfig msDeviceConfig;
 	TPtr8 ptr((TUint8*)&msDeviceConfig,sizeof(THostMassStorageConfig));
 
 	aMessage.ReadL(0, ptr);
 	__HOSTPRINT1(_L("EUsbHostMsRegisterInterface Token=%d "), msDeviceConfig.iInterfaceToken);
 
-	TInt r = KErrNone;
-    TName nameBuf;
-	TRequestStatus aStatus;
-
+    TBuf<20> nameBuf;
 	nameBuf.Format(_L("Host Ms Thread%d"), msDeviceConfig.iInterfaceToken);
-	iDeviceThread = CUsbHostMsDeviceThread::NewL(msDeviceConfig.iInterfaceToken);
+	iDeviceThread = CUsbHostMsDeviceThread::NewL(*this, msDeviceConfig.iInterfaceToken);
 
 	RHeap* h = (RHeap*)&User::Allocator();
 	TInt maxsize = h->MaxLength();	// loader heap max size = file server heap max size
 	const TUint KHeapMinSize = 2048;
 
-	r = iThread.Create(nameBuf, CUsbHostMsDeviceThread::Entry, KDefaultStackSize, KHeapMinSize, maxsize, iDeviceThread);
+	TInt r = iThread.Create(nameBuf, CUsbHostMsDeviceThread::Entry, KDefaultStackSize, KHeapMinSize, maxsize, iDeviceThread);
 	if(r != KErrNone)
 		{
 		delete iDeviceThread;
@@ -187,20 +171,29 @@
 		User::Leave(r);
 		}
 	iThread.SetPriority(EPriorityAbsoluteBackgroundNormal);
-	iThread.Rendezvous(aStatus);
+	TRequestStatus status;
+	iThread.Rendezvous(status);
 	iThread.Resume();
-	User::WaitForRequest(aStatus);
-	if(aStatus != KErrNone)
+	User::WaitForRequest(status);
+	if(status != KErrNone)
 		{
 		if(iDeviceThread->IsActive())
-			{
-			TRequestStatus* s=&iDeviceThread->iStatus;
-			iThread.RequestComplete(s, KErrSessionClosed);
+			{			
+			iThread.RequestComplete(iClientStatus, KErrSessionClosed);
 			}
 		iDeviceThread->Cancel();
 		delete iDeviceThread;
         iDeviceThread = NULL;
 		iThread.Kill(KErrNone);
-		User::Leave(aStatus.Int());
+		User::Leave(status.Int());
 		}
 	}
+
+
+
+void CUsbHostMsSession::MessageRequest(TRequestStatus& aStatus)
+    {
+    __MSFNLOG
+    iClientStatus = &aStatus;
+    *iClientStatus = KRequestPending;
+    }