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
  -}
  
  
  

Reply via email to