all should work now, but test mrwautofunctiontracelog4cxx_test-mt fails, so no multithreading until this is fixed; refs #2
This commit is contained in:
		@@ -68,7 +68,7 @@ AX_DEFINE_DIR([DATADIR], [datadir])
 | 
				
			|||||||
#AC_SUBST(DATADIR)
 | 
					#AC_SUBST(DATADIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# macros
 | 
					# macros
 | 
				
			||||||
sed 's/.*/ &/g' ${0%/*}/README > ${0%/*}/README.debian
 | 
					sed -e 's/^$/./' -e 's/^/ /g' ${0%/*}/README > ${0%/*}/README.debian
 | 
				
			||||||
READMEDEB=README.debian
 | 
					READMEDEB=README.debian
 | 
				
			||||||
AC_SUBST_FILE(READMEDEB)
 | 
					AC_SUBST_FILE(READMEDEB)
 | 
				
			||||||
README=README
 | 
					README=README
 | 
				
			||||||
@@ -143,7 +143,7 @@ AC_ARG_ENABLE(ltdl,
 | 
				
			|||||||
                          Note: For automated stack trace, you need either
 | 
					                          Note: For automated stack trace, you need either
 | 
				
			||||||
                                ltdl or the libbfd BFD library from
 | 
					                                ltdl or the libbfd BFD library from
 | 
				
			||||||
                                the binutils package at compile time.],
 | 
					                                the binutils package at compile time.],
 | 
				
			||||||
  [have_ltdl="$enableval"], [have_ltdl="yes"])
 | 
					  [have_ltdl="$enableval"], [have_ltdl="$have_ltdl"])
 | 
				
			||||||
AM_CONDITIONAL(HAVE_LTDL, test "$have_ltdl" = "yes")
 | 
					AM_CONDITIONAL(HAVE_LTDL, test "$have_ltdl" = "yes")
 | 
				
			||||||
AC_ARG_ENABLE(dynamicstack,
 | 
					AC_ARG_ENABLE(dynamicstack,
 | 
				
			||||||
  [  --enable-dynamic-stack  enable use of libtool library dynamic loading
 | 
					  [  --enable-dynamic-stack  enable use of libtool library dynamic loading
 | 
				
			||||||
@@ -197,7 +197,8 @@ if test "$have_stacktrace" = "yes"; then
 | 
				
			|||||||
It is required for stack trace!
 | 
					It is required for stack trace!
 | 
				
			||||||
 - install binutils or binutils-devel
 | 
					 - install binutils or binutils-devel
 | 
				
			||||||
 - or configure with option --enable-ltdl
 | 
					 - or configure with option --enable-ltdl
 | 
				
			||||||
 - or configure with option --disable-stacktrace])])
 | 
					 - or configure with option --disable-stacktrace])],
 | 
				
			||||||
 | 
					                   -lz)
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  # bug {
 | 
					  # bug {
 | 
				
			||||||
  ac_includes_default=$old_ac_includes_default
 | 
					  ac_includes_default=$old_ac_includes_default
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -92,9 +92,9 @@ namespace mrw {
 | 
				
			|||||||
  void unexpected_log4cxx() {
 | 
					  void unexpected_log4cxx() {
 | 
				
			||||||
    static const std::string name("mrw.stacktrace");
 | 
					    static const std::string name("mrw.stacktrace");
 | 
				
			||||||
    log4cxx::LoggerPtr logger
 | 
					    log4cxx::LoggerPtr logger
 | 
				
			||||||
      (log4cxx::Logger::getLogger(log4cxx::String(name.begin(), name.end())));
 | 
					      (log4cxx::Logger::getLogger(std::string(name.begin(), name.end())));
 | 
				
			||||||
    static const std::string txt("Unexpected Exception");
 | 
					    static const std::string txt("Unexpected Exception");
 | 
				
			||||||
    logger->fatal(log4cxx::String(txt.begin(), txt.end()), MRW_LOG4CXX_LOCATION);
 | 
					    logger->fatal(std::string(txt.begin(), txt.end()), MRW_LOG4CXX_LOCATION);
 | 
				
			||||||
    StackTrace::createSymtable();
 | 
					    StackTrace::createSymtable();
 | 
				
			||||||
    std::string st((std::string)StackTrace());
 | 
					    std::string st((std::string)StackTrace());
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
@@ -102,15 +102,15 @@ namespace mrw {
 | 
				
			|||||||
    } catch (const mrw::exception& x) {
 | 
					    } catch (const mrw::exception& x) {
 | 
				
			||||||
      std::string txt(std::string("Reason:\n")+x.what()
 | 
					      std::string txt(std::string("Reason:\n")+x.what()
 | 
				
			||||||
                      +"\nStack:\n"+x.stacktrace());
 | 
					                      +"\nStack:\n"+x.stacktrace());
 | 
				
			||||||
      logger->fatal(log4cxx::String(txt.begin(), txt.end()));
 | 
					      logger->fatal(std::string(txt.begin(), txt.end()));
 | 
				
			||||||
    } catch (const std::exception& x) {
 | 
					    } catch (const std::exception& x) {
 | 
				
			||||||
      std::string txt(std::string("Reason:\n")+x.what()
 | 
					      std::string txt(std::string("Reason:\n")+x.what()
 | 
				
			||||||
                      +"\nStack:\n"+st);
 | 
					                      +"\nStack:\n"+st);
 | 
				
			||||||
      logger->fatal(log4cxx::String(txt.begin(), txt.end()));
 | 
					      logger->fatal(std::string(txt.begin(), txt.end()));
 | 
				
			||||||
    } catch (...) {
 | 
					    } catch (...) {
 | 
				
			||||||
      std::string txt(std::string("Reason: **** not available ****")
 | 
					      std::string txt(std::string("Reason: **** not available ****")
 | 
				
			||||||
                      +"\nStack:\n"+st);
 | 
					                      +"\nStack:\n"+st);
 | 
				
			||||||
      logger->fatal(log4cxx::String(txt.begin(), txt.end()));
 | 
					      logger->fatal(std::string(txt.begin(), txt.end()));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    throw std::bad_exception();
 | 
					    throw std::bad_exception();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -148,9 +148,9 @@ namespace mrw {
 | 
				
			|||||||
  void terminate_log4cxx() {
 | 
					  void terminate_log4cxx() {
 | 
				
			||||||
    static const std::string name("mrw.stacktrace");
 | 
					    static const std::string name("mrw.stacktrace");
 | 
				
			||||||
    log4cxx::LoggerPtr logger
 | 
					    log4cxx::LoggerPtr logger
 | 
				
			||||||
      (log4cxx::Logger::getLogger(log4cxx::String(name.begin(), name.end())));
 | 
					      (log4cxx::Logger::getLogger(std::string(name.begin(), name.end())));
 | 
				
			||||||
    static const std::string txt("Uncaught Exception");
 | 
					    static const std::string txt("Uncaught Exception");
 | 
				
			||||||
    logger->fatal(log4cxx::String(txt.begin(), txt.end()), MRW_LOG4CXX_LOCATION);
 | 
					    logger->fatal(std::string(txt.begin(), txt.end()), MRW_LOG4CXX_LOCATION);
 | 
				
			||||||
    StackTrace::createSymtable();
 | 
					    StackTrace::createSymtable();
 | 
				
			||||||
    std::string st((std::string)StackTrace());
 | 
					    std::string st((std::string)StackTrace());
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
@@ -158,15 +158,15 @@ namespace mrw {
 | 
				
			|||||||
    } catch (const mrw::exception& x) {
 | 
					    } catch (const mrw::exception& x) {
 | 
				
			||||||
      std::string txt(std::string("Reason:\n")+x.what()
 | 
					      std::string txt(std::string("Reason:\n")+x.what()
 | 
				
			||||||
                      +"\nStack:\n"+x.stacktrace());
 | 
					                      +"\nStack:\n"+x.stacktrace());
 | 
				
			||||||
      logger->fatal(log4cxx::String(txt.begin(), txt.end()));
 | 
					      logger->fatal(std::string(txt.begin(), txt.end()));
 | 
				
			||||||
    } catch (const std::exception& x) {
 | 
					    } catch (const std::exception& x) {
 | 
				
			||||||
      std::string txt(std::string("Reason:\n")+x.what()
 | 
					      std::string txt(std::string("Reason:\n")+x.what()
 | 
				
			||||||
                      +"\nStack:\n"+st);
 | 
					                      +"\nStack:\n"+st);
 | 
				
			||||||
      logger->fatal(log4cxx::String(txt.begin(), txt.end()));
 | 
					      logger->fatal(std::string(txt.begin(), txt.end()));
 | 
				
			||||||
    } catch (...) {
 | 
					    } catch (...) {
 | 
				
			||||||
      std::string txt(std::string("Reason: **** not available ****")
 | 
					      std::string txt(std::string("Reason: **** not available ****")
 | 
				
			||||||
                      +"\nStack:\n"+st);
 | 
					                      +"\nStack:\n"+st);
 | 
				
			||||||
      logger->fatal(log4cxx::String(txt.begin(), txt.end()));
 | 
					      logger->fatal(std::string(txt.begin(), txt.end()));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    exit(1);
 | 
					    exit(1);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -222,9 +222,9 @@ namespace mrw {
 | 
				
			|||||||
    std::string st((std::string)StackTrace());
 | 
					    std::string st((std::string)StackTrace());
 | 
				
			||||||
    static const std::string name("mrw.stacktrace");
 | 
					    static const std::string name("mrw.stacktrace");
 | 
				
			||||||
    log4cxx::LoggerPtr logger
 | 
					    log4cxx::LoggerPtr logger
 | 
				
			||||||
      (log4cxx::Logger::getLogger(log4cxx::String(name.begin(), name.end())));
 | 
					      (log4cxx::Logger::getLogger(std::string(name.begin(), name.end())));
 | 
				
			||||||
    std::string errtxt("Aborted by signal: "+txt+"\nStack:\n"+st);
 | 
					    std::string errtxt("Aborted by signal: "+txt+"\nStack:\n"+st);
 | 
				
			||||||
    logger->fatal(log4cxx::String(errtxt.begin(), errtxt.end()));
 | 
					    logger->fatal(std::string(errtxt.begin(), errtxt.end()));
 | 
				
			||||||
    if (abort) exit(1);
 | 
					    if (abort) exit(1);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,6 +26,7 @@
 | 
				
			|||||||
#include <log4cxx/propertyconfigurator.h>
 | 
					#include <log4cxx/propertyconfigurator.h>
 | 
				
			||||||
#include <log4cxx/helpers/properties.h>
 | 
					#include <log4cxx/helpers/properties.h>
 | 
				
			||||||
#include <fstream>
 | 
					#include <fstream>
 | 
				
			||||||
 | 
					#include <cstdlib>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if (__GNUC__==3 && __GNUC_MINOR__<4 || __GNUC__<3) \
 | 
					#if (__GNUC__==3 && __GNUC_MINOR__<4 || __GNUC__<3) \
 | 
				
			||||||
  && defined(_REENTRANT) && !defined(_MT)
 | 
					  && defined(_REENTRANT) && !defined(_MT)
 | 
				
			||||||
@@ -125,93 +126,93 @@ log4j.appender.A1.layout.ConversionPattern = \%-40l - \%m\%n
 | 
				
			|||||||
          logconfigfile = "/etc/mrwlog4cxx";
 | 
					          logconfigfile = "/etc/mrwlog4cxx";
 | 
				
			||||||
        if (logconfigfile.size()) {
 | 
					        if (logconfigfile.size()) {
 | 
				
			||||||
          log4cxx::PropertyConfigurator::configure
 | 
					          log4cxx::PropertyConfigurator::configure
 | 
				
			||||||
            (log4cxx::String(logconfigfile.begin(), logconfigfile.end()));
 | 
					            (std::string(logconfigfile.begin(), logconfigfile.end()));
 | 
				
			||||||
          return;
 | 
					          return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        log4cxx::helpers::Properties properties;
 | 
					        log4cxx::helpers::Properties properties;
 | 
				
			||||||
        std::string name, cont;
 | 
					        std::string name, cont;
 | 
				
			||||||
        properties.setProperty((name="log4j.rootLogger",
 | 
					        properties.setProperty((name="log4j.rootLogger",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="WARN, A1",
 | 
					                               (cont="WARN, A1",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fntracea",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fntracea",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.log4cxx",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.log4cxx",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.boost",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.boost",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.Thread",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.Thread",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.QString",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.QString",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.QShared",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.QShared",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.QWidget",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.QWidget",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.QRect",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.QRect",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.qstrcmp",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.qstrcmp",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.*.qt_cast",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.*.qt_cast",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.mrw",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.mrw",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.std",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.std",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.CppUnit",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.CppUnit",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.__gnu_cxx",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.__gnu_cxx",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.appender.A1",
 | 
					        properties.setProperty((name="log4j.appender.A1",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="org.apache.log4j.ConsoleAppender",
 | 
					                               (cont="org.apache.log4j.ConsoleAppender",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.appender.A1.layout",
 | 
					        properties.setProperty((name="log4j.appender.A1.layout",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="org.apache.log4j.PatternLayout",
 | 
					                               (cont="org.apache.log4j.PatternLayout",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
#ifdef _MT
 | 
					#ifdef _MT
 | 
				
			||||||
        properties.setProperty((name="log4j.appender.A1.layout.ConversionPattern",
 | 
					        properties.setProperty((name="log4j.appender.A1.layout.ConversionPattern",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="%t-%-40l - %m%n",
 | 
					                               (cont="%t-%-40l - %m%n",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
        properties.setProperty((name="log4j.appender.A1.layout.ConversionPattern",
 | 
					        properties.setProperty((name="log4j.appender.A1.layout.ConversionPattern",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="%-40l - %m%n",
 | 
					                               (cont="%-40l - %m%n",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
        log4cxx::PropertyConfigurator::configure(properties);
 | 
					        log4cxx::PropertyConfigurator::configure(properties);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -253,10 +253,10 @@ namespace mrw {
 | 
				
			|||||||
          _tracer(tracer.begin(), tracer.end()) {
 | 
					          _tracer(tracer.begin(), tracer.end()) {
 | 
				
			||||||
        log4cxx::Logger* logger(log4cxx::Logger::getLogger(_tracer));
 | 
					        log4cxx::Logger* logger(log4cxx::Logger::getLogger(_tracer));
 | 
				
			||||||
        if (logger->isDebugEnabled()) {
 | 
					        if (logger->isDebugEnabled()) {
 | 
				
			||||||
          std::basic_stringstream<log4cxx::String::value_type> oss;
 | 
					          std::basic_stringstream<std::string::value_type> oss;
 | 
				
			||||||
          oss<<std::hex<<std::setw(15)<<_addr<<": "
 | 
					          oss<<std::hex<<std::setw(15)<<_addr<<": "
 | 
				
			||||||
             <<std::dec<<std::setw(2+_level)
 | 
					             <<std::dec<<std::setw(2+_level)
 | 
				
			||||||
             <<std::setfill(log4cxx::String::value_type(' '))<<"\\ "<<_name;
 | 
					             <<std::setfill(std::string::value_type(' '))<<"\\ "<<_name;
 | 
				
			||||||
          logger->forcedLog(MRW_LEVEL_DEBUG, oss.str(),
 | 
					          logger->forcedLog(MRW_LEVEL_DEBUG, oss.str(),
 | 
				
			||||||
                            MRW_LOG4CXX_LOCATION);
 | 
					                            MRW_LOG4CXX_LOCATION);
 | 
				
			||||||
          ++_level;
 | 
					          ++_level;
 | 
				
			||||||
@@ -269,9 +269,9 @@ namespace mrw {
 | 
				
			|||||||
          _tracer(tracer.begin(), tracer.end()) {
 | 
					          _tracer(tracer.begin(), tracer.end()) {
 | 
				
			||||||
        log4cxx::Logger* logger(log4cxx::Logger::getLogger(_tracer));
 | 
					        log4cxx::Logger* logger(log4cxx::Logger::getLogger(_tracer));
 | 
				
			||||||
        if (logger->isDebugEnabled()) {
 | 
					        if (logger->isDebugEnabled()) {
 | 
				
			||||||
          std::basic_stringstream<log4cxx::String::value_type> oss;
 | 
					          std::basic_stringstream<std::string::value_type> oss;
 | 
				
			||||||
          oss<<std::setw(17)<<' '
 | 
					          oss<<std::setw(17)<<' '
 | 
				
			||||||
             <<std::setw(2+_level)<<std::setfill(log4cxx::String::value_type(' '))
 | 
					             <<std::setw(2+_level)<<std::setfill(std::string::value_type(' '))
 | 
				
			||||||
             <<"\\ "<<_name;
 | 
					             <<"\\ "<<_name;
 | 
				
			||||||
          logger->forcedLog(MRW_LEVEL_DEBUG, oss.str(),
 | 
					          logger->forcedLog(MRW_LEVEL_DEBUG, oss.str(),
 | 
				
			||||||
                            MRW_LOG4CXX_LOCATION);
 | 
					                            MRW_LOG4CXX_LOCATION);
 | 
				
			||||||
@@ -282,12 +282,12 @@ namespace mrw {
 | 
				
			|||||||
        log4cxx::Logger* logger(log4cxx::Logger::getLogger(_tracer));
 | 
					        log4cxx::Logger* logger(log4cxx::Logger::getLogger(_tracer));
 | 
				
			||||||
        if (logger->isDebugEnabled()) {
 | 
					        if (logger->isDebugEnabled()) {
 | 
				
			||||||
          --_level;
 | 
					          --_level;
 | 
				
			||||||
          std::basic_stringstream<log4cxx::String::value_type> oss;
 | 
					          std::basic_stringstream<std::string::value_type> oss;
 | 
				
			||||||
          if (_addr)
 | 
					          if (_addr)
 | 
				
			||||||
            oss<<std::hex<<std::setw(15)<<_addr<<": "<<std::dec;
 | 
					            oss<<std::hex<<std::setw(15)<<_addr<<": "<<std::dec;
 | 
				
			||||||
          else
 | 
					          else
 | 
				
			||||||
            oss<<std::setw(17)<<' '; 
 | 
					            oss<<std::setw(17)<<' '; 
 | 
				
			||||||
          oss<<std::setw(2+_level)<<std::setfill(log4cxx::String::value_type(' '))
 | 
					          oss<<std::setw(2+_level)<<std::setfill(std::string::value_type(' '))
 | 
				
			||||||
             <<"/ "<<_name;
 | 
					             <<"/ "<<_name;
 | 
				
			||||||
          logger->forcedLog(MRW_LEVEL_DEBUG, oss.str(),
 | 
					          logger->forcedLog(MRW_LEVEL_DEBUG, oss.str(),
 | 
				
			||||||
                            MRW_LOG4CXX_LOCATION);
 | 
					                            MRW_LOG4CXX_LOCATION);
 | 
				
			||||||
@@ -295,10 +295,10 @@ namespace mrw {
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    private:
 | 
					    private:
 | 
				
			||||||
      const void* _addr;
 | 
					      const void* _addr;
 | 
				
			||||||
      const log4cxx::String _name;
 | 
					      const std::string _name;
 | 
				
			||||||
      const std::string _file;
 | 
					      const std::string _file;
 | 
				
			||||||
      unsigned long _line;
 | 
					      unsigned long _line;
 | 
				
			||||||
      const log4cxx::String _tracer;
 | 
					      const std::string _tracer;
 | 
				
			||||||
      /** @todo for multithreading, use thread specific storage */
 | 
					      /** @todo for multithreading, use thread specific storage */
 | 
				
			||||||
      static unsigned int _level;
 | 
					      static unsigned int _level;
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,25 +74,25 @@ class FunctionTraceTest: public CppUnit::TestFixture {
 | 
				
			|||||||
      log4cxx::helpers::Properties properties;
 | 
					      log4cxx::helpers::Properties properties;
 | 
				
			||||||
      std::string name, cont;
 | 
					      std::string name, cont;
 | 
				
			||||||
      properties.setProperty((name="log4j.rootLogger",
 | 
					      properties.setProperty((name="log4j.rootLogger",
 | 
				
			||||||
                              log4cxx::String(name.begin(), name.end())),
 | 
					                              std::string(name.begin(), name.end())),
 | 
				
			||||||
                             (cont="DEBUG, A1",
 | 
					                             (cont="DEBUG, A1",
 | 
				
			||||||
                              log4cxx::String(cont.begin(), cont.end())));
 | 
					                              std::string(cont.begin(), cont.end())));
 | 
				
			||||||
      properties.setProperty((name="log4j.appender.A1",
 | 
					      properties.setProperty((name="log4j.appender.A1",
 | 
				
			||||||
                              log4cxx::String(name.begin(), name.end())),
 | 
					                              std::string(name.begin(), name.end())),
 | 
				
			||||||
                             (cont="org.apache.log4j.FileAppender",
 | 
					                             (cont="org.apache.log4j.FileAppender",
 | 
				
			||||||
                              log4cxx::String(cont.begin(), cont.end())));
 | 
					                              std::string(cont.begin(), cont.end())));
 | 
				
			||||||
      properties.setProperty((name="log4j.appender.A1.layout",
 | 
					      properties.setProperty((name="log4j.appender.A1.layout",
 | 
				
			||||||
                              log4cxx::String(name.begin(), name.end())),
 | 
					                              std::string(name.begin(), name.end())),
 | 
				
			||||||
                             (cont="org.apache.log4j.PatternLayout",
 | 
					                             (cont="org.apache.log4j.PatternLayout",
 | 
				
			||||||
                              log4cxx::String(cont.begin(), cont.end())));
 | 
					                              std::string(cont.begin(), cont.end())));
 | 
				
			||||||
      properties.setProperty((name="log4j.appender.A1.layout.ConversionPattern",
 | 
					      properties.setProperty((name="log4j.appender.A1.layout.ConversionPattern",
 | 
				
			||||||
                              log4cxx::String(name.begin(), name.end())),
 | 
					                              std::string(name.begin(), name.end())),
 | 
				
			||||||
                             (cont="%F:%L - %m%n",
 | 
					                             (cont="%F:%L - %m%n",
 | 
				
			||||||
                              log4cxx::String(cont.begin(), cont.end())));
 | 
					                              std::string(cont.begin(), cont.end())));
 | 
				
			||||||
      properties.setProperty((name="log4j.appender.A1.filename",
 | 
					      properties.setProperty((name="log4j.appender.A1.filename",
 | 
				
			||||||
                              log4cxx::String(name.begin(), name.end())),
 | 
					                              std::string(name.begin(), name.end())),
 | 
				
			||||||
                             (cont="functiontrace_test.log",
 | 
					                             (cont="functiontrace_test.log",
 | 
				
			||||||
                              log4cxx::String(cont.begin(), cont.end())));
 | 
					                              std::string(cont.begin(), cont.end())));
 | 
				
			||||||
      log4cxx::PropertyConfigurator::configure(properties);
 | 
					      log4cxx::PropertyConfigurator::configure(properties);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    void Calls() {
 | 
					    void Calls() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -156,7 +156,7 @@ if AUTOFNTRACE
 | 
				
			|||||||
      mrwautofunctiontracelog4cxx_test_LDFLAGS = \
 | 
					      mrwautofunctiontracelog4cxx_test_LDFLAGS = \
 | 
				
			||||||
        @CPPUNIT_LIBS@ -L${top_builddir}/src -finstrument-functions
 | 
					        @CPPUNIT_LIBS@ -L${top_builddir}/src -finstrument-functions
 | 
				
			||||||
      mrwautofunctiontracelog4cxx_test_LDADD = \
 | 
					      mrwautofunctiontracelog4cxx_test_LDADD = \
 | 
				
			||||||
        -llog4cxx -lmrwautofunctiontracelog4cxx
 | 
					        -llog4cxx -lmrwautofunctiontracelog4cxx -lmrw
 | 
				
			||||||
if HAVE_THREADS
 | 
					if HAVE_THREADS
 | 
				
			||||||
if HAVE_BOOST_THREAD
 | 
					if HAVE_BOOST_THREAD
 | 
				
			||||||
        mrwautofunctiontracelog4cxx_test_mt_SOURCES = \
 | 
					        mrwautofunctiontracelog4cxx_test_mt_SOURCES = \
 | 
				
			||||||
@@ -168,7 +168,7 @@ if HAVE_BOOST_THREAD
 | 
				
			|||||||
        mrwautofunctiontracelog4cxx_test_mt_LDFLAGS = \
 | 
					        mrwautofunctiontracelog4cxx_test_mt_LDFLAGS = \
 | 
				
			||||||
          @CPPUNIT_LIBS@ -L${top_builddir}/src @THREADS@ -finstrument-functions
 | 
					          @CPPUNIT_LIBS@ -L${top_builddir}/src @THREADS@ -finstrument-functions
 | 
				
			||||||
        mrwautofunctiontracelog4cxx_test_mt_LDADD = \
 | 
					        mrwautofunctiontracelog4cxx_test_mt_LDADD = \
 | 
				
			||||||
          -llog4cxx -lmrwautofunctiontracelog4cxx-mt @BOOST_THREAD_LIB@
 | 
					          -llog4cxx -lmrwautofunctiontracelog4cxx-mt -lmrw @BOOST_THREAD_LIB@
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,7 +67,7 @@ void anotherFunction() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef _MT
 | 
					#ifdef _MT
 | 
				
			||||||
#include <boost/thread/thread.hxx>
 | 
					#include <boost/thread/thread.hpp>
 | 
				
			||||||
//#include <unistd.h> // sleep, the one from boost::thread does not work!
 | 
					//#include <unistd.h> // sleep, the one from boost::thread does not work!
 | 
				
			||||||
class Thread {
 | 
					class Thread {
 | 
				
			||||||
  public:
 | 
					  public:
 | 
				
			||||||
@@ -91,91 +91,91 @@ namespace mrw {
 | 
				
			|||||||
        log4cxx::helpers::Properties properties;
 | 
					        log4cxx::helpers::Properties properties;
 | 
				
			||||||
        std::string name, cont;
 | 
					        std::string name, cont;
 | 
				
			||||||
        properties.setProperty((name="log4j.rootLogger",
 | 
					        properties.setProperty((name="log4j.rootLogger",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF, A1",
 | 
					                               (cont="OFF, A1",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="DEBUG",
 | 
					                               (cont="DEBUG",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.global",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.global",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.allocator",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.allocator",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.std.*",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.std.*",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.log4cxx",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.log4cxx",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.boost",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.boost",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.Thread",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.Thread",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.mrw",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.mrw",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.std",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.std",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.new",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.new",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.CppUnit",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.CppUnit",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.logger.mrw.fn.__gnu_cxx",
 | 
					        properties.setProperty((name="log4j.logger.mrw.fn.__gnu_cxx",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="OFF",
 | 
					                               (cont="OFF",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.appender.A1",
 | 
					        properties.setProperty((name="log4j.appender.A1",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="org.apache.log4j.FileAppender",
 | 
					                               (cont="org.apache.log4j.FileAppender",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.appender.A1.layout",
 | 
					        properties.setProperty((name="log4j.appender.A1.layout",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="org.apache.log4j.PatternLayout",
 | 
					                               (cont="org.apache.log4j.PatternLayout",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
#ifdef _MT
 | 
					#ifdef _MT
 | 
				
			||||||
        properties.setProperty((name="log4j.appender.A1.layout.ConversionPattern",
 | 
					        properties.setProperty((name="log4j.appender.A1.layout.ConversionPattern",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="%t-%-27c%m%n",
 | 
					                               (cont="%t-%-27c%m%n",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.appender.A1.filename",
 | 
					        properties.setProperty((name="log4j.appender.A1.filename",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="mrwautofunctiontracelog4cxx_test-mt.log",
 | 
					                               (cont="mrwautofunctiontracelog4cxx_test-mt.log",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
        properties.setProperty((name="log4j.appender.A1.layout.ConversionPattern",
 | 
					        properties.setProperty((name="log4j.appender.A1.layout.ConversionPattern",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="%-27c%m%n",
 | 
					                               (cont="%-27c%m%n",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
        properties.setProperty((name="log4j.appender.A1.filename",
 | 
					        properties.setProperty((name="log4j.appender.A1.filename",
 | 
				
			||||||
                                log4cxx::String(name.begin(), name.end())),
 | 
					                                std::string(name.begin(), name.end())),
 | 
				
			||||||
                               (cont="mrwautofunctiontracelog4cxx_test.log",
 | 
					                               (cont="mrwautofunctiontracelog4cxx_test.log",
 | 
				
			||||||
                                log4cxx::String(cont.begin(), cont.end())));
 | 
					                                std::string(cont.begin(), cont.end())));
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
        log4cxx::PropertyConfigurator::configure(properties);
 | 
					        log4cxx::PropertyConfigurator::configure(properties);
 | 
				
			||||||
#ifdef _MT
 | 
					#ifdef _MT
 | 
				
			||||||
        // sleep(4); // to be reproducable, wait for "main" flag
 | 
					        // sleep(4); // to be reproducable, wait for "main" flag
 | 
				
			||||||
        Thread threadFunction;
 | 
					        Thread threadFunction;
 | 
				
			||||||
        boost::thread::thread thread1(threadFunction);
 | 
					        boost::thread thread1(threadFunction);
 | 
				
			||||||
        boost::thread::thread thread2(threadFunction);
 | 
					        boost::thread thread2(threadFunction);
 | 
				
			||||||
        boost::thread::thread thread3(threadFunction);
 | 
					        boost::thread thread3(threadFunction);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
        anotherFunction();
 | 
					        anotherFunction();
 | 
				
			||||||
#ifdef _MT
 | 
					#ifdef _MT
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user