Re: getRootLogger() thread-safe?

2014-03-11 Thread Thorsten Schöning
Guten Tag Kaspar Fischer,
am Montag, 10. März 2014 um 18:32 schrieben Sie:

 Static local variables are not thread-safe so it looks to me as if
 you want to change that – from a user's perspective, it's nice to be
 able to assume that getRootLogger() is thread-safe. What do you think?

I tend to agree, we fixed the same problem in LOGCXX-394 as well. I
created a new bug and provided a patch for others to review:

https://issues.apache.org/jira/browse/LOGCXX-430

Mit freundlichen Grüßen,

Thorsten Schöning

-- 
Thorsten Schöning   E-Mail:thorsten.schoen...@am-soft.de
AM-SoFT IT-Systeme  http://www.AM-SoFT.de/

Telefon...05151-  9468- 55
Fax...05151-  9468- 88
Mobil..0178-8 9468- 04

AM-SoFT GmbH IT-Systeme, Brandenburger Str. 7c, 31789 Hameln
AG Hannover HRB 207 694 - Geschäftsführer: Andreas Muchow



Re: getRootLogger() thread-safe?

2014-03-10 Thread Thorsten Schöning
Guten Tag Kaspar Fischer,
am Montag, 10. März 2014 um 03:20 schrieben Sie:

 Is getRootLogger() thread safe?

Looks like the same problem as in LOGCXX-394 to me.

https://issues.apache.org/jira/browse/LOGCXX-394

 RepositorySelectorPtr LogManager::getRepositorySelector() {
//
// call to initialize APR and trigger start of logging clock
//
APRInitializer::initialize();
static spi::RepositorySelectorPtr selector;
return selector;
 }

 LoggerRepositoryPtr LogManager::getLoggerRepository()
 {
 if (getRepositorySelector() == 0)
 {
 LoggerRepositoryPtr hierarchy(new Hierarchy());
 RepositorySelectorPtr selector(new 
 DefaultRepositorySelector(hierarchy));
 getRepositorySelector() = selector;
 }

 return getRepositorySelector()-getLoggerRepository();
 }

 LoggerPtr LogManager::getRootLogger()
 {
 // Delegate the actual manufacturing of the logger to the logger 
 repository.
 return getLoggerRepository()-getRootLogger();
 }

Could try to just remove the static in the following line?

static spi::RepositorySelectorPtr selector;

If that works, we'll consider just removing that on trunk as well,
like with LOG4CXX-394.

Mit freundlichen Grüßen,

Thorsten Schöning

-- 
Thorsten Schöning   E-Mail:thorsten.schoen...@am-soft.de
AM-SoFT IT-Systeme  http://www.AM-SoFT.de/

Telefon...05151-  9468- 55
Fax...05151-  9468- 88
Mobil..0178-8 9468- 04

AM-SoFT GmbH IT-Systeme, Brandenburger Str. 7c, 31789 Hameln
AG Hannover HRB 207 694 - Geschäftsführer: Andreas Muchow



Re: getRootLogger() thread-safe?

2014-03-10 Thread Kaspar Fischer
Hi Thorsten,

Thanks a lot for the quick response! Unfortunately, we use a pre-built
package so I can't patch the code.

However, when I create a static variable

  log4cxx::LoggerPtr log4cxx_root_logger = log4cxx::Logger::getRootLogger();

and use log4cxx_root_logger in my code (instead of
log4cxx::Logger::getRootLogger()), all works fine.

Static local variables are not thread-safe so it looks to me as if you want
to change that - from a user's perspective, it's nice to be able to assume
that getRootLogger() is thread-safe. What do you think?

- Kaspar



On Mon, Mar 10, 2014 at 12:20 AM, Thorsten Schöning
tschoen...@am-soft.dewrote:

 Guten Tag Kaspar Fischer,
 am Montag, 10. März 2014 um 03:20 schrieben Sie:

  Is getRootLogger() thread safe?

 Looks like the same problem as in LOGCXX-394 to me.

 https://issues.apache.org/jira/browse/LOGCXX-394

  RepositorySelectorPtr LogManager::getRepositorySelector() {
 //
 // call to initialize APR and trigger start of logging clock
 //
 APRInitializer::initialize();
 static spi::RepositorySelectorPtr selector;
 return selector;
  }

  LoggerRepositoryPtr LogManager::getLoggerRepository()
  {
  if (getRepositorySelector() == 0)
  {
  LoggerRepositoryPtr hierarchy(new Hierarchy());
  RepositorySelectorPtr selector(new
 DefaultRepositorySelector(hierarchy));
  getRepositorySelector() = selector;
  }
 
  return getRepositorySelector()-getLoggerRepository();
  }

  LoggerPtr LogManager::getRootLogger()
  {
  // Delegate the actual manufacturing of the logger to the logger
 repository.
  return getLoggerRepository()-getRootLogger();
  }

 Could try to just remove the static in the following line?

 static spi::RepositorySelectorPtr selector;

 If that works, we'll consider just removing that on trunk as well,
 like with LOG4CXX-394.

 Mit freundlichen Grüßen,

 Thorsten Schöning

 --
 Thorsten Schöning   E-Mail:thorsten.schoen...@am-soft.de
 AM-SoFT IT-Systeme  http://www.AM-SoFT.de/

 Telefon...05151-  9468- 55
 Fax...05151-  9468- 88
 Mobil..0178-8 9468- 04

 AM-SoFT GmbH IT-Systeme, Brandenburger Str. 7c, 31789 Hameln
 AG Hannover HRB 207 694 - Geschäftsführer: Andreas Muchow