@@ -55,6 +55,8 @@ xoutbase & xoutbase::operator[](const char * cellname)
5555void
5656xoutbase::WriteBufferedData (void )
5757{
58+ const LockGuardType mutexLock (GetRecursiveMutex ());
59+
5860 /* * Update the target c-streams. */
5961 for (const auto & cell : m_CTargetCells)
6062 {
@@ -77,6 +79,8 @@ xoutbase::WriteBufferedData(void)
7779int
7880xoutbase::AddTargetCell (const char * name, std::ostream * cell)
7981{
82+ const LockGuardType mutexLock (GetRecursiveMutex ());
83+
8084 int returndummy = 1 ;
8185
8286 if (this ->m_XTargetCells .count (name))
@@ -102,6 +106,8 @@ xoutbase::AddTargetCell(const char * name, std::ostream * cell)
102106int
103107xoutbase::AddTargetCell (const char * name, Self * cell)
104108{
109+ const LockGuardType mutexLock (GetRecursiveMutex ());
110+
105111 int returndummy = 1 ;
106112
107113 if (this ->m_CTargetCells .count (name))
@@ -127,6 +133,8 @@ xoutbase::AddTargetCell(const char * name, Self * cell)
127133int
128134xoutbase::RemoveTargetCell (const char * name)
129135{
136+ const LockGuardType mutexLock (GetRecursiveMutex ());
137+
130138 int returndummy = 1 ;
131139
132140 if (this ->m_XTargetCells .erase (name) > 0 )
@@ -151,6 +159,8 @@ xoutbase::RemoveTargetCell(const char * name)
151159void
152160xoutbase::SetTargetCells (const CStreamMapType & cellmap)
153161{
162+ const LockGuardType mutexLock (GetRecursiveMutex ());
163+
154164 this ->m_CTargetCells = cellmap;
155165
156166} // end SetTargetCells
@@ -163,6 +173,7 @@ xoutbase::SetTargetCells(const CStreamMapType & cellmap)
163173void
164174xoutbase::SetTargetCells (const XStreamMapType & cellmap)
165175{
176+ const LockGuardType mutexLock (GetRecursiveMutex ());
166177 this ->m_XTargetCells = cellmap;
167178
168179} // end SetTargetCells
@@ -175,7 +186,8 @@ xoutbase::SetTargetCells(const XStreamMapType & cellmap)
175186int
176187xoutbase::AddOutput (const char * name, std::ostream * output)
177188{
178- int returndummy = 1 ;
189+ const LockGuardType mutexLock (GetRecursiveMutex ());
190+ int returndummy = 1 ;
179191
180192 if (this ->m_XOutputs .count (name))
181193 {
@@ -199,7 +211,8 @@ xoutbase::AddOutput(const char * name, std::ostream * output)
199211int
200212xoutbase::AddOutput (const char * name, Self * output)
201213{
202- int returndummy = 1 ;
214+ const LockGuardType mutexLock (GetRecursiveMutex ());
215+ int returndummy = 1 ;
203216
204217 if (this ->m_COutputs .count (name))
205218 {
@@ -223,7 +236,8 @@ xoutbase::AddOutput(const char * name, Self * output)
223236int
224237xoutbase::RemoveOutput (const char * name)
225238{
226- int returndummy = 1 ;
239+ const LockGuardType mutexLock (GetRecursiveMutex ());
240+ int returndummy = 1 ;
227241
228242 if (this ->m_XOutputs .count (name))
229243 {
@@ -249,6 +263,7 @@ xoutbase::RemoveOutput(const char * name)
249263void
250264xoutbase::SetOutputs (const CStreamMapType & outputmap)
251265{
266+ const LockGuardType mutexLock (GetRecursiveMutex ());
252267 this ->m_COutputs = outputmap;
253268
254269} // end SetOutputs
@@ -261,6 +276,7 @@ xoutbase::SetOutputs(const CStreamMapType & outputmap)
261276void
262277xoutbase::SetOutputs (const XStreamMapType & outputmap)
263278{
279+ const LockGuardType mutexLock (GetRecursiveMutex ());
264280 this ->m_XOutputs = outputmap;
265281
266282} // end SetOutputs
@@ -275,6 +291,8 @@ xoutbase::SetOutputs(const XStreamMapType & outputmap)
275291xoutbase &
276292xoutbase::SelectXCell (const char * name)
277293{
294+ const LockGuardType readMutexLock (GetRecursiveMutex ());
295+
278296 const auto found = m_XTargetCells.find (name);
279297 return (found == m_XTargetCells.end ()) ? *this : *(found->second );
280298
@@ -303,4 +321,12 @@ xoutbase::GetCOutputs(void)
303321
304322} // end GetOutputs
305323
324+
325+ std::recursive_mutex &
326+ xoutbase::GetRecursiveMutex ()
327+ {
328+ static std::recursive_mutex mutex;
329+ return mutex;
330+ }
331+
306332} // end namespace xoutlibrary
0 commit comments