Module Name: src
Committed By: christos
Date: Tue Dec 14 23:19:23 UTC 2010
Modified Files:
src/external/bsd/bind/include/isc: atomic.h platform.h
Log Message:
handle lack of <sys/atomic.h>
To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/external/bsd/bind/include/isc/atomic.h
cvs rdiff -u -r1.7 -r1.8 src/external/bsd/bind/include/isc/platform.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/bsd/bind/include/isc/atomic.h
diff -u src/external/bsd/bind/include/isc/atomic.h:1.1 src/external/bsd/bind/include/isc/atomic.h:1.2
--- src/external/bsd/bind/include/isc/atomic.h:1.1 Sat Apr 11 23:46:09 2009
+++ src/external/bsd/bind/include/isc/atomic.h Tue Dec 14 18:19:23 2010
@@ -1,9 +1,13 @@
-/* $NetBSD: atomic.h,v 1.1 2009/04/12 03:46:09 christos Exp $ */
+/* $NetBSD: atomic.h,v 1.2 2010/12/14 23:19:23 christos Exp $ */
#ifndef ISC_ATOMIC_H
#define ISC_ATOMIC_H 1
+#ifdef ISC_PLATFORM_USE_THREADS
#include <sys/atomic.h>
+#else
+#define ISC_NO_ATOMIC
+#endif
#include <isc/types.h>
/*
@@ -12,15 +16,27 @@
*/
static __inline isc_int32_t
isc_atomic_xadd(isc_int32_t *p, isc_int32_t val) {
+#ifdef ISC_NO_ATOMIC
+ isc_int32_t oval = *p;
+ *p = val;
+ return oval;
+#else
return (isc_int32_t)atomic_add_32_nv((volatile uint32_t *)p,
(uint32_t)val) - val;
+#endif
}
#ifdef ISC_PLATFORM_HAVEXADDQ
static __inline isc_int64_t
isc_atomic_xaddq(isc_int64_t *p, isc_int64_t val) {
+#ifdef ISC_NO_ATOMIC
+ isc_int64_t oval = *p;
+ *p = val;
+ return oval;
+#else
return (isc_int64_t)atomic_add_64_nv((volatile uint64_t *)p,
(uint64_t)val) - val;
+#endif
}
#endif
@@ -29,7 +45,11 @@
*/
static __inline void
isc_atomic_store(isc_int32_t *p, isc_int32_t val) {
+#ifdef ISC_NO_ATOMIC
+ *p = val;
+#else
(void)atomic_swap_32((volatile uint32_t *)p, (uint32_t)val);
+#endif
}
/*
@@ -39,8 +59,15 @@
*/
static __inline__ isc_int32_t
isc_atomic_cmpxchg(isc_int32_t *p, isc_int32_t cmpval, isc_int32_t val) {
+#ifdef ISC_NO_ATOMIC
+ isc_int32_t oval = *p;
+ if (oval == val)
+ *p = val;
+ return oval;
+#else
return (isc_int32_t) atomic_cas_32((volatile uint32_t *)p,
(uint32_t)cmpval, (uint32_t)val);
+#endif
}
#endif /* ISC_ATOMIC_H */
Index: src/external/bsd/bind/include/isc/platform.h
diff -u src/external/bsd/bind/include/isc/platform.h:1.7 src/external/bsd/bind/include/isc/platform.h:1.8
--- src/external/bsd/bind/include/isc/platform.h:1.7 Thu Dec 2 09:52:19 2010
+++ src/external/bsd/bind/include/isc/platform.h Tue Dec 14 18:19:23 2010
@@ -25,7 +25,9 @@
/*****
***** Platform-dependent defines.
*****/
+#ifdef ISC_PLATFORM_USE_THREADS
#include <sys/atomic.h>
+#endif
/***
*** Network.