You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4cxx-user@logging.apache.org by xu...@altern.org on 2014/11/21 11:57:14 UTC

Re: log4cxx 0.9.7: Fix for memory leaks and crashes in x86_64 builds

RUOFF, LARS (LARS) wrote:
> Hi,
> For those who like I are stuck with log4cxx v0.9.7 and have experienced memory leaks and crashes in x86_64 (64bit) builds on Linux,
> Here is a small fix:
> 
> (Base is 0.9.7)
> src\thread.cpp:
> 
> @@ -201,6 +201,14 @@
>  			      : "0" (1), "m" (*val));
>  
>  	return ret+1;
> +#elif defined(__x86_64__)
> +	long ret;
> +	
> +	__asm__ __volatile__ ("lock; xadd %0, %1"
> +			      : "=r" (ret), "=m" (*val)
> +			      : "0" (1), "m" (*val));
> +
> +	return ret+1;
>  #elif defined(sparc) && defined(__SUNPRO_CC)
>  	sparc_atomic_add_32(val, 1);
>  	return *val;
> @@ -226,6 +234,14 @@
>  			      : "0" (-1), "m" (*val));
>  
>  	return ret-1;
> +#elif defined(__x86_64__)
> +	long ret;
> +
> +	__asm__ __volatile__ ("lock; xadd %0, %1"
> +			      : "=r" (ret), "=m" (*val)
> +			      : "0" (-1), "m" (*val));
> +
> +	return ret-1;
>  	
>  #elif defined(sparc) && defined(__SUNPRO_CC)
>  	sparc_atomic_add_32(val, -1);
> 
> 
> The problem was that the locked increment/decrement functions (used by the reference counting for smart pointers for all of log4cxx's dynamic objects) had empty function bodies on x86_64 systems.
> Note: The latest 0.10.x versions probably don't have this issue as they are relying on Apache libs for locked increment.
> 
> hope it can be usefull,
> Best regards,
> Lars Ruoff
> 
> 

Hi,

Thanks for sharing your fix!
(Not tested yet, but could be useful to me)

Regards,
xunile