--- 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 <f32plugin.h>
#include "f32trace.h"
+
#define __PRINT1TEMP_ALWAYS(t,a) {{TBuf<KMaxFileName>temp(a);RDebug::Print(t,&temp);}}
#define __PRINT2TEMP_ALWAYS(t,a,b) {{TBuf<KMaxFileName>temp(b);RDebug::Print(t,a,&temp);}}
#define __PRINT3TEMP_ALWAYS(t,a,b,c) {{TBuf<KMaxFileName>temp(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<TReservedDriveAccess> 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;