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.

Reply via email to