19 #ifndef INCLUDE_RCF_THREADLOCALDATA_HPP
20 #define INCLUDE_RCF_THREADLOCALDATA_HPP
22 #include <boost/shared_ptr.hpp>
24 #include <RCF/ByteBuffer.hpp>
25 #include <RCF/Export.hpp>
26 #include <RCF/RecursionLimiter.hpp>
27 #include <RCF/ThreadLibrary.hpp>
43 class UdpNetworkSession;
45 class AmiNotification;
51 typedef boost::shared_ptr<ClientStub> ClientStubPtr;
52 typedef boost::shared_ptr<RcfSession> RcfSessionPtr;
53 typedef boost::shared_ptr<ThreadInfo> ThreadInfoPtr;
54 typedef boost::shared_ptr<UdpNetworkSession> UdpNetworkSessionPtr;
55 typedef boost::shared_ptr<OverlappedAmi> OverlappedAmiPtr;
56 typedef boost::shared_ptr<LogBuffers> LogBuffersPtr;
57 typedef boost::function1<void, RcfSession&> RcfSessionCallback;
58 typedef boost::shared_ptr<Filter> FilterPtr;
64 class ThreadLocalData;
65 ThreadLocalData & getThreadLocalData();
67 RCF_EXPORT
void clearThreadLocalDataForThisThread();
69 RCF_EXPORT ClientStub * getTlsClientStubPtr();
71 RCF_EXPORT
void pushTlsClientStub(
72 ClientStub * pClientStub);
74 RCF_EXPORT
void popTlsClientStub();
76 RCF_EXPORT RcfSession * getCurrentRcfSessionPtr();
77 RCF_EXPORT RcfSession * getTlsRcfSessionPtr();
79 RCF_EXPORT
void setTlsRcfSessionPtr(
80 RcfSession * pRcfSession = NULL);
82 RCF_EXPORT std::vector<RcfSession*>& getRcfSessionSentryStack();
84 RCF_EXPORT ThreadInfoPtr getTlsThreadInfoPtr();
86 RCF_EXPORT
void setTlsThreadInfoPtr(
87 ThreadInfoPtr threadInfoPtr);
89 RCF_EXPORT UdpNetworkSessionPtr getTlsUdpNetworkSessionPtr();
91 RCF_EXPORT
void setTlsUdpNetworkSessionPtr(
92 UdpNetworkSessionPtr udpNetworkSessionPtr);
94 RCF_EXPORT RcfSession & getCurrentRcfSession();
95 RCF_EXPORT RcfSession & getTlsRcfSession();
97 RecursionState<int, int> & getTlsRcfSessionRecursionState();
99 RCF_EXPORT AmiNotification & getTlsAmiNotification();
101 RCF_EXPORT LogBuffers & getTlsLogBuffers();
103 RCF_EXPORT std::vector< std::vector<RCF::ByteBuffer> * > &
104 getTlsCache(std::vector<RCF::ByteBuffer> *);
106 RCF_EXPORT std::vector< std::vector<int> * > &
107 getTlsCache(std::vector<int> *);
109 RCF_EXPORT std::vector< std::vector<WSABUF> * > &
110 getTlsCache(std::vector<WSABUF> *);
112 RCF_EXPORT std::vector< std::vector<FilterPtr> * > &
113 getTlsCache(std::vector<FilterPtr> *);
115 RCF_EXPORT std::vector< std::vector<RcfSessionCallback> * > &
116 getTlsCache(std::vector<RcfSessionCallback> *);
118 RCF_EXPORT std::vector< std::vector<FileUpload> * > &
119 getTlsCache(std::vector<FileUpload> *);
122 class ThreadLocalCached
126 ThreadLocalCached() : mpt(NULL)
128 std::vector<T *> & tlsCache = getTlsCache( (T *) NULL);
129 if (tlsCache.empty())
135 mpt = tlsCache.back();
138 RCF_ASSERT(mpt->empty());
144 std::vector<T *> & tlsCache = getTlsCache( (T *) NULL);
145 tlsCache.push_back(mpt);
159 void RCF_EXPORT addThreadExitHandler(boost::function<
void()> func);
163 #endif // ! INCLUDE_RCF_THREADLOCALDATA_HPP