[
https://issues.apache.org/jira/browse/LOGCXX-394?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Thorsten Schöning resolved LOGCXX-394.
--------------------------------------
Resolution: Fixed
LOGCXX-394: With removing static in Level::get* some of the tests failed
because they relied on the fact that LevelPtr overrides operator== by comparing
pointers and because of the static levels those pointers where always the same
for every level. I changed this by LevelPtr overriding operator== on it's own
and comparing the level values instead of it's pointers. The seems to make more
sense for Levels anyways, especially because Level::equals already behaved that
way and ignored the pointer of LevelPtr, but compared it's level value instead.
I'll focus on == and != for now and not override each method of ObjectPtr
because those 2 are only used in Level.
We don't have many options anyways, either we revert to using sttaic levels and
introduce the bug again or we need to adopt already written code to compare
using a cast or such.
> Levels are not thread safe
> --------------------------
>
> Key: LOGCXX-394
> URL: https://issues.apache.org/jira/browse/LOGCXX-394
> Project: Log4cxx
> Issue Type: Bug
> Components: Appender
> Environment: Windows 7, Visual Studio 2010 SP1
> Reporter: Petro Protsyk
> Assignee: Thorsten Schöning
> Priority: Minor
> Labels: thread-safety
>
> Level.cpp. All default level variables are function static. This is not
> thread safe, especially in Visual C++ compiler.
> Here is code to reproduce the issue in VC++ 2010:
> Concurrency::parallel_for (int(0), int(10), [&](int i)
> {
> if (::log4cxx::Level::getWarn() == NULL)
> {
> throw std::exception();
> }
> });
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)