xref: /aoo41x/main/framework/inc/macros/debug/mutex.hxx (revision cdf0e10c)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef __FRAMEWORK_MACROS_DEBUG_MUTEX_HXX_
29 #define __FRAMEWORK_MACROS_DEBUG_MUTEX_HXX_
30 
31 //*****************************************************************************************************************
32 //	special macros for mutex handling
33 //*****************************************************************************************************************
34 
35 #ifdef	ENABLE_MUTEXDEBUG
36 
37 	//_____________________________________________________________________________________________________________
38 	//	includes
39 	//_____________________________________________________________________________________________________________
40 
41 	#ifndef _RTL_STRBUF_HXX_
42 	#include <rtl/strbuf.hxx>
43 	#endif
44 
45 	/*_____________________________________________________________________________________________________________
46 		LOGFILE_MUTEX
47 
48 		For follow macros we need a special log file. If user forget to specify anyone, we must do it for him!
49 	_____________________________________________________________________________________________________________*/
50 
51 	#ifndef	LOGFILE_MUTEX
52         #define LOGFILE_MUTEX   "mutex.log"
53 	#endif
54 
55 	/*_____________________________________________________________________________________________________________
56         LOG_LOCKTYPE( _EFALLBACK, _ECURRENT )
57 
58         Write informations about current set lock type for whole framework project to special file.
59 	_____________________________________________________________________________________________________________*/
60 
61     #define LOG_LOCKTYPE( _EFALLBACK, _ECURRENT )                                                               \
62                 /* new scope to prevent us against multiple definitions of variables ... */                     \
63                 {                                                                                               \
64                     ::rtl::OStringBuffer _sBuffer( 256 );                                                       \
65                     _sBuffer.append( "Set framework lock type to fallback: \"" );                               \
66                     switch( _EFALLBACK )                                                                        \
67                     {                                                                                           \
68                         case E_NOTHING      :   _sBuffer.append( "E_NOTHING"    );                              \
69                                                 break;                                                          \
70                         case E_OWNMUTEX     :   _sBuffer.append( "E_OWNMUTEX"   );                              \
71                                                 break;                                                          \
72                         case E_SOLARMUTEX   :   _sBuffer.append( "E_SOLARMUTEX" );                              \
73                                                 break;                                                          \
74                         case E_FAIRRWLOCK   :   _sBuffer.append( "E_FAIRRWLOCK" );                              \
75                                                 break;                                                          \
76                     }                                                                                           \
77                     _sBuffer.append( "\"\n" );                                                                  \
78                     if( _EFALLBACK != _ECURRENT )                                                               \
79                     {                                                                                           \
80                         _sBuffer.append( "... environment overwrite framework lock type with: \"" );            \
81                         switch( _ECURRENT )                                                                     \
82                         {                                                                                       \
83                             case E_NOTHING      :   _sBuffer.append( "E_NOTHING"    );                          \
84                                                     break;                                                      \
85                             case E_OWNMUTEX     :   _sBuffer.append( "E_OWNMUTEX"   );                          \
86                                                     break;                                                      \
87                             case E_SOLARMUTEX   :   _sBuffer.append( "E_SOLARMUTEX" );                          \
88                                                     break;                                                      \
89                             case E_FAIRRWLOCK   :   _sBuffer.append( "E_FAIRRWLOCK" );                          \
90                                                     break;                                                      \
91                         }                                                                                       \
92                         _sBuffer.append( "\"\n" );                                                              \
93                     }                                                                                           \
94                     else                                                                                        \
95                     {                                                                                           \
96                         _sBuffer.append( "... use fallback, because user don't set another value!\n" );         \
97                     }                                                                                           \
98                     WRITE_LOGFILE( LOGFILE_MUTEX, _sBuffer.makeStringAndClear() )                               \
99                 }
100 
101 #else	// #ifdef ENABLE_MUTEXDEBUG
102 
103 	/*_____________________________________________________________________________________________________________
104 		If right testmode is'nt set - implements these macro with normal functionality!
105 		We need the guard but not the log mechanism.
106 	_____________________________________________________________________________________________________________*/
107 
108 	#undef	LOGFILE_MUTEX
109     #define LOG_LOCKTYPE( _EFALLBACK, _ECURRENT )
110 
111 #endif	// #ifdef ENABLE_MUTEXDEBUG
112 
113 //*****************************************************************************************************************
114 //	end of file
115 //*****************************************************************************************************************
116 
117 #endif	// #ifndef __FRAMEWORK_MACROS_DEBUG_MUTEX_HXX_
118