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