carnold 2004/11/14 14:09:34
Modified: include/log4cxx/helpers objectimpl.h thread.h
src loggingevent.cpp objectimpl.cpp thread.cpp
Log:
LOGCXX-36: Migrate to APR threads - switch to APR atomic ops
Revision Changes Path
1.16 +1 -1 logging-log4cxx/include/log4cxx/helpers/objectimpl.h
Index: objectimpl.h
===================================================================
RCS file: /home/cvs/logging-log4cxx/include/log4cxx/helpers/objectimpl.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- objectimpl.h 22 Oct 2004 17:35:29 -0000 1.15
+++ objectimpl.h 14 Nov 2004 22:09:33 -0000 1.16
@@ -40,7 +40,7 @@
virtual void notifyAll() const;
protected:
- mutable long volatile ref;
+ mutable unsigned int volatile ref;
mutable CriticalSection cs;
mutable void * eventList;
1.18 +0 -10 logging-log4cxx/include/log4cxx/helpers/thread.h
Index: thread.h
===================================================================
RCS file: /home/cvs/logging-log4cxx/include/log4cxx/helpers/thread.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- thread.h 25 Oct 2004 04:44:03 -0000 1.17
+++ thread.h 14 Nov 2004 22:09:33 -0000 1.18
@@ -125,16 +125,6 @@
*/
void setPriority(int newPriority);
- /**
- Atomic increment
- */
- static long InterlockedIncrement(volatile long * val);
-
- /**
- Atomic decrement
- */
- static long InterlockedDecrement(volatile long * val);
-
protected:
RunnablePtr runnable;
MDC::Map parentMDCMap;
1.16 +12 -4 logging-log4cxx/src/loggingevent.cpp
Index: loggingevent.cpp
===================================================================
RCS file: /home/cvs/logging-log4cxx/src/loggingevent.cpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- loggingevent.cpp 13 Nov 2004 23:02:12 -0000 1.15
+++ loggingevent.cpp 14 Nov 2004 22:09:33 -0000 1.16
@@ -26,7 +26,9 @@
#include <log4cxx/helpers/loader.h>
#include <log4cxx/helpers/socket.h>
-#include <apr-1/apr_time.h>
+#include <apr-1/apr_time.h>
+#include <apr-1/apr_pools.h>
+#include <apr-1/apr_atomic.h>
using namespace log4cxx;
using namespace log4cxx::spi;
@@ -43,12 +45,18 @@
class APRInitializer {
public:
APRInitializer() {
- apr_initialize();
+ apr_initialize();
+ apr_pool_create(&p, NULL);
+ apr_atomic_init(p);
}
- ~APRInitializer() {
+ ~APRInitializer() {
+ apr_pool_destroy(p);
apr_terminate();
- }
+ }
+
+ private:
+ apr_pool_t* p;
};
}
}
1.18 +4 -3 logging-log4cxx/src/objectimpl.cpp
Index: objectimpl.cpp
===================================================================
RCS file: /home/cvs/logging-log4cxx/src/objectimpl.cpp,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- objectimpl.cpp 25 Oct 2004 04:44:03 -0000 1.17
+++ objectimpl.cpp 14 Nov 2004 22:09:34 -0000 1.18
@@ -24,6 +24,7 @@
#include <log4cxx/helpers/criticalsection.h>
#include <log4cxx/helpers/event.h>
#include <log4cxx/helpers/thread.h>
+#include <apr-1/apr_atomic.h>
using namespace log4cxx::helpers;
@@ -91,13 +92,13 @@
}
void ObjectImpl::addRef() const
-{
- Thread::InterlockedIncrement(&ref);
+{
+ apr_atomic_inc32(&ref);
}
void ObjectImpl::releaseRef() const
{
- if (Thread::InterlockedDecrement(&ref) == 0)
+ if (apr_atomic_dec32(&ref) == 0)
{
delete this;
}
1.19 +0 -79 logging-log4cxx/src/thread.cpp
Index: thread.cpp
===================================================================
RCS file: /home/cvs/logging-log4cxx/src/thread.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- thread.cpp 26 Oct 2004 18:12:28 -0000 1.18
+++ thread.cpp 14 Nov 2004 22:09:34 -0000 1.19
@@ -179,82 +179,3 @@
break;
}
}
-
-#ifdef __GLIBCPP__
-#include <bits/atomicity.h>
-#else
-#if defined(sparc) && defined(__SUNPRO_CC)
-extern "C" long sparc_atomic_add_32 (volatile long* p, long val);
-
-static void asm_code()
-{
- asm(".align 8"); \
- asm(".global sparc_atomic_add_32"); \
- asm(".type sparc_atomic_add_32, #function"); \
-
- asm("sparc_atomic_add_32:");
- asm(" membar #Lookaside | #LoadLoad | #LoadStore | #StoreLoad");
- asm(" ld [%o0], %l0"); // l0 = *p;
- asm(" add %l0, %o1, %l2"); // l2 = l0 + val
- asm(" cas [%o0], %l0, %l2"); // if (*p = l0) swap([o0], l2);
- asm(" cmp %l0, %l2"); // does it match
- asm(" bne sparc_atomic_add_32");// if not try again
- asm(" nop"); // delay slot filler
- asm(" add %l2, %o1, %o0"); // set return code
- asm(" membar #Lookaside | #LoadLoad | #LoadStore | #StoreLoad");
- asm("retl");
- asm("nop");
-}
-#endif
-#endif
-
-long Thread::InterlockedIncrement(volatile long * val)
-{
-#ifdef __GLIBCPP__
- return __exchange_and_add((volatile _Atomic_word *)val, 1 ) + 1;
-#elif defined(__i386__)
- long ret;
-
- __asm__ __volatile__ ("lock; xaddl %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;
-#elif defined(LOG4CXX_HAVE_MS_THREAD)
-#if LOG4CXX_HAVE_OLD_WIN32_INTERLOCKS // MSDEV 6
- return ::InterlockedIncrement((long *)val);
-#else
- return ::InterlockedIncrement(val);
-#endif // _MSC_VER
- return *val + 1; // unsafe
-#endif
-}
-
-long Thread::InterlockedDecrement(volatile long * val)
-{
-#ifdef __GLIBCPP__
- return __exchange_and_add((volatile _Atomic_word *)val, -1 ) - 1;
-#elif defined(__i386__)
- long ret;
-
- __asm__ __volatile__ ("lock; xaddl %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;
-#elif defined(LOG4CXX_HAVE_MS_THREAD)
-#if LOG4CXX_HAVE_OLD_WIN32_INTERLOCKS // MSDEV 6
- return ::InterlockedDecrement((long *)val);
-#else
- return ::InterlockedDecrement(val);
-#endif // _MSC_VER
- return *val - 1; // unsafe
-#endif
-}