Hi,

I saw two problems with apr_atomic.h which causes the testatomic
test to fail under FreeBSD.

The two problems are:

- atomic_subtract_int() returns void, but apr_atomic_dec() needs
  to return an int
- the semantics of atomic_set_int() is:
   atomic_set_int(P, V)         (*(u_int*)(P) |= (V))

  but apr_atomic_set requires the semantics to be:
        *P = V

Here is a patch.


Index: apr_atomic.h
===================================================================
RCS file: /home/cvspublic/apr/include/apr_atomic.h,v
retrieving revision 1.47
diff -u -u -r1.47 apr_atomic.h
--- apr_atomic.h        5 Mar 2003 21:22:25 -0000       1.47
+++ apr_atomic.h        23 Mar 2003 04:30:50 -0000
@@ -206,10 +206,16 @@
 
 #define apr_atomic_t apr_uint32_t
 #define apr_atomic_add(mem, val)     atomic_add_int(mem,val)
-#define apr_atomic_dec(mem)          atomic_subtract_int(mem,1)
 #define apr_atomic_inc(mem)          atomic_add_int(mem,1)
-#define apr_atomic_set(mem, val)     atomic_set_int(mem, val)
+#define apr_atomic_set(mem, val)     (*(mem) = val)
 #define apr_atomic_read(mem)         (*mem)
+
+#define APR_OVERRIDE_ATOMIC_DEC 1
+APR_INLINE int apr_atomic_dec(apr_atomic_t *mem)
+{
+    atomic_subtract_int(mem,1);
+    return *mem;
+}
 
 #elif (defined(__linux__) || defined(__EMX__)) && defined(__i386__) && 
!APR_FORCE_ATOMIC_GENERIC
 



-- 
Craig Rodrigues        
http://home.attbi.com/~rodrigc
[EMAIL PROTECTED]

Reply via email to