diff -r dc268b18d709 -r 6a75fa55495f userlibandfileserver/fileserver/sfile/sf_std.h --- a/userlibandfileserver/fileserver/sfile/sf_std.h Wed Sep 22 10:53:45 2010 +0100 +++ b/userlibandfileserver/fileserver/sfile/sf_std.h Mon Sep 27 10:52:00 2010 +0100 @@ -35,6 +35,7 @@ #include #include "f32trace.h" + #define __PRINT1TEMP_ALWAYS(t,a) {{TBuftemp(a);RDebug::Print(t,&temp);}} #define __PRINT2TEMP_ALWAYS(t,a,b) {{TBuftemp(b);RDebug::Print(t,a,&temp);}} #define __PRINT3TEMP_ALWAYS(t,a,b,c) {{TBuftemp(c);RDebug::Print(t,a,b,&temp);}} @@ -452,7 +453,8 @@ ETooManyDrivesPerSocket, ENotificationFault, EFsObjectOpen, - EContainerHeapCorruptionOnRemove + EContainerHeapCorruptionOnRemove, + ESessionOpenError, }; @@ -546,7 +548,6 @@ void DoCancel(); void RunL(); void Dispatch(CFsRequest* aRequest); - void CompleteSessionRequests(CSessionFs* aSession, TInt aValue); private: CFsSyncMessageScheduler(); void ConstructL(); @@ -769,7 +770,6 @@ { public: void CompleteReadWriteRequests(); - void CompleteSessionRequests(CSessionFs* aSession, TInt aValue); void CompleteClientRequests(TInt aValue); TBool IsRequestWriteable(); TBool IsSessionNotifyUser(); @@ -792,19 +792,6 @@ class CFsInternalRequest; -NONSHARABLE_CLASS(CDisconnectThread) : public CRequestThread - { -public: - inline CFsInternalRequest* GetRequest(); -private: - static CDisconnectThread* NewL(); - TUint StartL(); - ~CDisconnectThread(); -private: - CFsInternalRequest* iRequest; -friend class FsThreadManager; - }; - class CFsPlugin; NONSHARABLE_CLASS(CPluginThread) : public CRequestThread { @@ -812,8 +799,6 @@ CPluginThread(CFsPlugin& aPlugin, RLibrary aLibrary); ~CPluginThread(); - void CompleteSessionRequests(CSessionFs* aSession, TInt aValue); - /** @prototype */ void OperationLockWait(); @@ -852,9 +837,6 @@ class FsThreadManager { public: - static TInt CreateDisconnectThread(); - static inline CDisconnectThread* GetDisconnectThread() {return(iDisconnectThread);} - static TBool IsDisconnectThread(); // static void SetMainThreadId(); static TBool IsMainThread(); @@ -879,7 +861,6 @@ private: static TFsDriveThread iFsThreads[KMaxDrives]; static TUint iMainId; - static CDisconnectThread* iDisconnectThread; static TUint iDisconnectThreadId; }; @@ -905,8 +886,11 @@ { public: static CSessionFs* NewL(); - ~CSessionFs(); virtual void CreateL(); + + inline void Open(); + void Close(); + TInt CurrentDrive(); void ServiceL(const RMessage2& aMessage); TInt CountResources(); @@ -937,6 +921,7 @@ void SetReservedAccess(const TInt aDriveNumber, const TBool aReservedAccess); private: CSessionFs(); + ~CSessionFs(); private: TInt iResourceCountMark; @@ -945,11 +930,11 @@ RFastLock iSessionFlagsLock; CFsObjectIx* iHandles; HBufC* iPath; - CFsMessageRequest* iDisconnectRequest; RArray iReservedDriveAccess; TThreadId iId; TInt iCloseRequestCount; // number of close requests owned by this sessions on the RequestAllocator close queue -friend class CFsDisconnectRequest; + TInt iAccessCount; + RMessage2 iMessage; // message passed to CSessionFs::Disconnect() }; NONSHARABLE_CLASS(CServerFs) : public CServer2 @@ -1011,7 +996,8 @@ EInternalRequest = 0x02, // NB Not really used! EParseSrc = 0x04, EParseDst = 0x08, - EFileShare = 0x10, // Operates on an open file share + EFileShare = 0x10, // Operates on an open file share. NB not currently used + EFsDspObj = 0x20, // Bottom 32 bits of scratch value is a CFsDispatchObject }; class TOperation @@ -1221,6 +1207,7 @@ inline TBool DirectToDrive(); inline TBool IsDescData(TInt aMsgNum); inline TInt FsFunction(); + void Close(); // close the session & dispatch object this request is using public: CFsRequest(); @@ -1231,9 +1218,11 @@ inline TInt GetError() const; inline void SetPostOperation(TBool aSet); - inline TBool IsFsObjectOpen(); - inline void SetFsObjectOpen(TBool aSet); - void SetAndOpenScratchValue(const TInt64& aValue); + + void OpenDispatchObject(const TInt64& aValue); // open the dispatch object this request is using + void CloseDispatchObject(); + void OpenSession(CSessionFs* aSession); // open the session this request is using + void CloseSession(); private: TInt GetSlot(TFsPluginRequest::TF32ArgType aType); @@ -1260,7 +1249,7 @@ EFreeChanged = 0x02, // valid only for EFsFileWrite EPostInterceptEnabled = 0x04, EPostOperation = 0x08, - EFsObjectOpen = 0x10, + EFsDspObjOpen = 0x10, // scratch value (a CFsDispatchObject) has been opened }; TUint iFlags; @@ -1381,14 +1370,6 @@ TParsePool* iPoolDest; }; -NONSHARABLE_CLASS(CFsDisconnectRequest) : public CFsMessageRequest - { -public: - virtual void Process(); - virtual void Dispatch(); - virtual void Complete(TInt aError); - }; - NONSHARABLE_CLASS(CFsInternalRequest) : public CFsRequest { public: @@ -1721,18 +1702,14 @@ extern SCapabilitySet DisabledCapabilities; const TInt KDispatchObjectClose=KMaxTInt-1; -const TInt KSessionDisconnect=KMaxTInt-2; -const TInt KCancelSession=KMaxTInt-3; -const TInt KCancelPlugin=KMaxTInt-4; +const TInt KSessionInternalReserved2=KMaxTInt-2; // not used any more - placeholder +const TInt KSessionInternalReserved3=KMaxTInt-3; // not used any more - placeholder +const TInt KSessionInternalReserved4=KMaxTInt-4; // not used any more - placeholder const TInt KFileShareClose=KMaxTInt-5; const TInt KFlushDirtyData=KMaxTInt-6; const TOperation DispatchObjectCloseOp= {KDispatchObjectClose, EInternalRequest, &TFsCloseObject::Initialise, NULL, &TFsCloseObject::DoRequestL }; -const TOperation SessionDisconnectOp= {KSessionDisconnect, EInternalRequest, &TFsSessionDisconnect::Initialise, NULL, &TFsSessionDisconnect::DoRequestL }; -const TOperation CancelSessionOp= {KCancelSession, EInternalRequest, &TFsCancelSession::Initialise, NULL, &TFsCancelSession::DoRequestL }; -const TOperation CancelPluginOp= {KCancelPlugin, EInternalRequest, &TFsCancelPlugin::Initialise, NULL, &TFsCancelPlugin::DoRequestL }; const TOperation FileShareCloseOp= {KFileShareClose, EInternalRequest, &TFsCloseFileShare::Initialise, NULL, &TFsCloseFileShare::DoRequestL }; -const TOperation FlushDirtyDataOp= {KFlushDirtyData, EInternalRequest, &TFsFlushDirtyData::Initialise, NULL, &TFsFlushDirtyData::DoRequestL }; extern TBool OpenOnDriveZOnly; extern TBool LocalFileSystemInitialized;