1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef __FRAMEWORK_MACROS_DEBUG_MUTEX_HXX_
25*b1cdbd2cSJim Jagielski #define __FRAMEWORK_MACROS_DEBUG_MUTEX_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
28*b1cdbd2cSJim Jagielski //	special macros for mutex handling
29*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #ifdef	ENABLE_MUTEXDEBUG
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski 	//_____________________________________________________________________________________________________________
34*b1cdbd2cSJim Jagielski 	//	includes
35*b1cdbd2cSJim Jagielski 	//_____________________________________________________________________________________________________________
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski 	#ifndef _RTL_STRBUF_HXX_
38*b1cdbd2cSJim Jagielski 	#include <rtl/strbuf.hxx>
39*b1cdbd2cSJim Jagielski 	#endif
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski 	/*_____________________________________________________________________________________________________________
42*b1cdbd2cSJim Jagielski 		LOGFILE_MUTEX
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski 		For follow macros we need a special log file. If user forget to specify anyone, we must do it for him!
45*b1cdbd2cSJim Jagielski 	_____________________________________________________________________________________________________________*/
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski 	#ifndef	LOGFILE_MUTEX
48*b1cdbd2cSJim Jagielski         #define LOGFILE_MUTEX   "mutex.log"
49*b1cdbd2cSJim Jagielski 	#endif
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski 	/*_____________________________________________________________________________________________________________
52*b1cdbd2cSJim Jagielski         LOG_LOCKTYPE( _EFALLBACK, _ECURRENT )
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski         Write informations about current set lock type for whole framework project to special file.
55*b1cdbd2cSJim Jagielski 	_____________________________________________________________________________________________________________*/
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski     #define LOG_LOCKTYPE( _EFALLBACK, _ECURRENT )                                                               \
58*b1cdbd2cSJim Jagielski                 /* new scope to prevent us against multiple definitions of variables ... */                     \
59*b1cdbd2cSJim Jagielski                 {                                                                                               \
60*b1cdbd2cSJim Jagielski                     ::rtl::OStringBuffer _sBuffer( 256 );                                                       \
61*b1cdbd2cSJim Jagielski                     _sBuffer.append( "Set framework lock type to fallback: \"" );                               \
62*b1cdbd2cSJim Jagielski                     switch( _EFALLBACK )                                                                        \
63*b1cdbd2cSJim Jagielski                     {                                                                                           \
64*b1cdbd2cSJim Jagielski                         case E_NOTHING      :   _sBuffer.append( "E_NOTHING"    );                              \
65*b1cdbd2cSJim Jagielski                                                 break;                                                          \
66*b1cdbd2cSJim Jagielski                         case E_OWNMUTEX     :   _sBuffer.append( "E_OWNMUTEX"   );                              \
67*b1cdbd2cSJim Jagielski                                                 break;                                                          \
68*b1cdbd2cSJim Jagielski                         case E_SOLARMUTEX   :   _sBuffer.append( "E_SOLARMUTEX" );                              \
69*b1cdbd2cSJim Jagielski                                                 break;                                                          \
70*b1cdbd2cSJim Jagielski                         case E_FAIRRWLOCK   :   _sBuffer.append( "E_FAIRRWLOCK" );                              \
71*b1cdbd2cSJim Jagielski                                                 break;                                                          \
72*b1cdbd2cSJim Jagielski                     }                                                                                           \
73*b1cdbd2cSJim Jagielski                     _sBuffer.append( "\"\n" );                                                                  \
74*b1cdbd2cSJim Jagielski                     if( _EFALLBACK != _ECURRENT )                                                               \
75*b1cdbd2cSJim Jagielski                     {                                                                                           \
76*b1cdbd2cSJim Jagielski                         _sBuffer.append( "... environment overwrite framework lock type with: \"" );            \
77*b1cdbd2cSJim Jagielski                         switch( _ECURRENT )                                                                     \
78*b1cdbd2cSJim Jagielski                         {                                                                                       \
79*b1cdbd2cSJim Jagielski                             case E_NOTHING      :   _sBuffer.append( "E_NOTHING"    );                          \
80*b1cdbd2cSJim Jagielski                                                     break;                                                      \
81*b1cdbd2cSJim Jagielski                             case E_OWNMUTEX     :   _sBuffer.append( "E_OWNMUTEX"   );                          \
82*b1cdbd2cSJim Jagielski                                                     break;                                                      \
83*b1cdbd2cSJim Jagielski                             case E_SOLARMUTEX   :   _sBuffer.append( "E_SOLARMUTEX" );                          \
84*b1cdbd2cSJim Jagielski                                                     break;                                                      \
85*b1cdbd2cSJim Jagielski                             case E_FAIRRWLOCK   :   _sBuffer.append( "E_FAIRRWLOCK" );                          \
86*b1cdbd2cSJim Jagielski                                                     break;                                                      \
87*b1cdbd2cSJim Jagielski                         }                                                                                       \
88*b1cdbd2cSJim Jagielski                         _sBuffer.append( "\"\n" );                                                              \
89*b1cdbd2cSJim Jagielski                     }                                                                                           \
90*b1cdbd2cSJim Jagielski                     else                                                                                        \
91*b1cdbd2cSJim Jagielski                     {                                                                                           \
92*b1cdbd2cSJim Jagielski                         _sBuffer.append( "... use fallback, because user don't set another value!\n" );         \
93*b1cdbd2cSJim Jagielski                     }                                                                                           \
94*b1cdbd2cSJim Jagielski                     WRITE_LOGFILE( LOGFILE_MUTEX, _sBuffer.makeStringAndClear() )                               \
95*b1cdbd2cSJim Jagielski                 }
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski #else	// #ifdef ENABLE_MUTEXDEBUG
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski 	/*_____________________________________________________________________________________________________________
100*b1cdbd2cSJim Jagielski 		If right testmode is'nt set - implements these macro with normal functionality!
101*b1cdbd2cSJim Jagielski 		We need the guard but not the log mechanism.
102*b1cdbd2cSJim Jagielski 	_____________________________________________________________________________________________________________*/
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski 	#undef	LOGFILE_MUTEX
105*b1cdbd2cSJim Jagielski     #define LOG_LOCKTYPE( _EFALLBACK, _ECURRENT )
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski #endif	// #ifdef ENABLE_MUTEXDEBUG
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
110*b1cdbd2cSJim Jagielski //	end of file
111*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski #endif	// #ifndef __FRAMEWORK_MACROS_DEBUG_MUTEX_HXX_
114