carnold-3 wrote:
>
>
> On May 29, 2008, at 2:15 PM, GregN wrote:
>
>>
>> Segmentation fault on app exit.
>>
>> log4cxx, apr-1.2.12 and apr-util-1.2.12 had been build from tar file.
>>
>> gcc -v
>> Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.3/specs
>> Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
>> --infodir=/usr/share/info --enable-shared --enable-threads=posix
>> --disable-checking --with-system-zlib --enable-__cxa_atexit
>> --disable-libunwind-exceptions --enable-java-awt=gtk
>> --host=i386-redhat-linux
>> Thread model: posix
>> gcc version 3.4.3 20050227 (Red Hat 3.4.3-22.1)
>>
>> $ uname -a
>> Linux gredhat4 2.6.9-11.EL #1 Fri May 20 18:17:57 EDT 2005 i686 i686
>> i386
>> GNU/Linux
>>
>>
>> Test app successfully writes one line in log file with code:
>> int main() {
>> PropertyConfigurator::configure(LOG_PROPERTIES_FILE_LOCATION);
>> LoggerPtr LogManager::cplusLoggerPtr = Logger::getLogger("API");
>> LOG4CXX_INFO(cplusLoggerPtr , "test_info");
>> return 0;
>> }
>>
>>
>> C++ [C/C++ Local Application]
>> gdb/mi (5/29/08 2:31 PM) (Suspended)
>> Thread [1] (Suspended: Signal 'SIGSEGV' received. Description:
>> Segmentation fault.)
>> 8 apr_atomic_dec32() atomic/unix/apr_atomic.c:310
>> 0xb7d1efba
>> 7 log4cxx::helpers::ObjectImpl::releaseRef()
>> /home/grn/Projects/apache-log4cxx-0.10.0/src/main/cpp/objectimpl.cpp:
>> 44
>> 0xb7e36da0
>> 6 log4cxx::Logger::releaseRef()
>> /home/grn/Projects/apache-log4cxx-0.10.0/src/main/cpp/logger.cpp:62
>> 0xb7e20c5d
>> 5 ~ObjectPtrT()
>> /usr/local/include/log4cxx/helpers/objectptr.h:100
>> 0x080550e3
>> 4 __tcf_1() /home/..project specific...
>> 3 exit() 0x004ce467
>> 2 __libc_start_main() 0x004b8e2d
>> 1 _start() 0x080545ad
>>
>> Any suggestion is welcome...
>>
>> Thanks,
>> Gregory
>>
>
> APR goes to great length to try to use a platform provided atomic
> increment and decrement operation to implement apr_atomic_dec32 and
> apr_atomic_inc32, but contains a fallback implementation that uses APR
> mutexes to guard the operation. The stack trace suggests that the
> fallback mechanism was used after APR was terminated
> APRInitializer::~APRInitializer. Only the fallback implementation is
> susceptible to crashing if APR is terminated prematurely.
>
> It is unclear why was the fallback implementation of apr_atomic_dec32
> compiled when building APR. From your platform description, it
> appears that the inline assembler implementations near the top of
> atomic/unix/apr_atomic.c should have been compiled.
>
> You could probably avoid the Segmentation fault by changing:
>
> LoggerPtr LogManager::cplusLoggerPtr = Logger::getLogger("API");
>
> to:
>
> LoggerPtr LogManager::cplusLoggerPtr(Logger::getLogger("API"));
>
> The problem is that the default constructor for LoggerPtr does not
> initialize APR and so when things are destructed, APR gets terminated
> before the LoggerPtr is released. Using the one operation constructor
> causes APR to be initialized before the LoggerPtr is constructed and
> so the destruction occurs in the proper order.
>
>
Unfortunately your suggestion didn't fix the issue.
Under debugger the problem happen in apr_atomic.c::apr_atomic_dec32()
line:310.
It is inside #if APR_HAS_THREADS.
I tried to set APR_HAS_THREADS to 0 in include/apr.h but got system lookup
error.
--
View this message in context:
http://www.nabble.com/Segmentation-fault-log4cxx-0.10.0-on-app-exit-%28-RH-Linux%29-tp17543738p17567182.html
Sent from the Log4cxx - Users mailing list archive at Nabble.com.