xref: /trunk/main/framework/inc/macros/debug/mutex.hxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
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