Updated Branches: refs/heads/master b4d4f4a9a -> 76aa879db
TS-1385: generic atomic operations API Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/76aa879d Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/76aa879d Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/76aa879d Branch: refs/heads/master Commit: 76aa879db6d7d418486afba8804893d2133a5811 Parents: b4d4f4a Author: James Peach <[email protected]> Authored: Sat Jul 28 08:54:33 2012 -0700 Committer: James Peach <[email protected]> Committed: Sat Jul 28 08:54:33 2012 -0700 ---------------------------------------------------------------------- CHANGES | 2 + iocore/cache/P_CacheHosting.h | 2 +- iocore/cluster/ClusterMachine.cc | 2 +- iocore/dns/P_SplitDNSProcessor.h | 4 +- iocore/dns/SplitDNS.cc | 4 +- iocore/eventsystem/P_IOBuffer.h | 8 ++-- iocore/net/UnixUDPNet.cc | 6 +- lib/records/RecCore.cc | 10 ++-- lib/records/RecProcess.cc | 36 +++++++------- lib/ts/ink_atomic.h | 73 +++++++++++++++------------- lib/ts/ink_queue.cc | 22 ++++---- lib/ts/test_atomic.cc | 6 +- plugins/experimental/geoip_acl/lulu.h | 12 ++-- proxy/AbstractBuffer.h | 2 +- proxy/CacheControl.cc | 2 +- proxy/IPAllow.cc | 2 +- proxy/ParentSelection.cc | 6 +- proxy/ParentSelection.h | 2 +- proxy/ProxyConfig.cc | 2 +- proxy/ProxyConfig.h | 4 +- proxy/ReverseProxy.cc | 2 +- proxy/StatSystem.cc | 10 ++-- proxy/StatSystem.h | 16 +++--- proxy/congest/Congestion.cc | 2 +- proxy/http/HttpClientSession.cc | 2 +- proxy/http/HttpServerSession.cc | 2 +- proxy/http/HttpTransact.cc | 9 +--- proxy/logging/Log.cc | 2 +- proxy/logging/LogBuffer.h | 2 +- proxy/logging/LogConfig.cc | 2 +- proxy/logging/LogObject.cc | 6 +- 31 files changed, 133 insertions(+), 129 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/CHANGES ---------------------------------------------------------------------- diff --git a/CHANGES b/CHANGES index 052de74..ef89d62 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,7 @@ -*- coding: utf-8 -*- Changes with Apache Traffic Server 3.3.0 + *) [TS-1385] generic atomic operations API + *) [TS-1380] SSL wildcard lookup doesn't find the longest match *) [TS-1315] Fix URL parsing to handle non-HTTP schemes correctly. http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/iocore/cache/P_CacheHosting.h ---------------------------------------------------------------------- diff --git a/iocore/cache/P_CacheHosting.h b/iocore/cache/P_CacheHosting.h index 2f5c7e3..871ba8f 100644 --- a/iocore/cache/P_CacheHosting.h +++ b/iocore/cache/P_CacheHosting.h @@ -150,7 +150,7 @@ struct CacheHostTableConfig: public Continuation (void) e; (void) event; CacheHostTable *t = NEW(new CacheHostTable((*ppt)->cache, (*ppt)->type)); - CacheHostTable *old = (CacheHostTable *) ink_atomic_swap_ptr(&t, ppt); + CacheHostTable *old = (CacheHostTable *) ink_atomic_swap(&t, *ppt); new_Deleter(old, CACHE_MEM_FREE_TIMEOUT); return EVENT_DONE; } http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/iocore/cluster/ClusterMachine.cc ---------------------------------------------------------------------- diff --git a/iocore/cluster/ClusterMachine.cc b/iocore/cluster/ClusterMachine.cc index cd056e2..4607191 100644 --- a/iocore/cluster/ClusterMachine.cc +++ b/iocore/cluster/ClusterMachine.cc @@ -154,7 +154,7 @@ ClusterHandler *ClusterMachine::pop_ClusterHandler(int no_rr) { int64_t now = rr_count; if (no_rr == 0) - ink_atomic_increment64(&rr_count, 1); + ink_atomic_increment(&rr_count, 1); return this->clusterHandlers[now % this->num_connections]; } http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/iocore/dns/P_SplitDNSProcessor.h ---------------------------------------------------------------------- diff --git a/iocore/dns/P_SplitDNSProcessor.h b/iocore/dns/P_SplitDNSProcessor.h index 38ce322..c89869b 100644 --- a/iocore/dns/P_SplitDNSProcessor.h +++ b/iocore/dns/P_SplitDNSProcessor.h @@ -108,8 +108,8 @@ public: void release(unsigned int id, SplitDNSConfigInfo * data); public: - volatile SplitDNSConfigInfo *infos[MAX_CONFIGS]; - volatile int ninfos; + SplitDNSConfigInfo *infos[MAX_CONFIGS]; + int ninfos; }; http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/iocore/dns/SplitDNS.cc ---------------------------------------------------------------------- diff --git a/iocore/dns/SplitDNS.cc b/iocore/dns/SplitDNS.cc index 871e898..00c6943 100644 --- a/iocore/dns/SplitDNS.cc +++ b/iocore/dns/SplitDNS.cc @@ -635,8 +635,8 @@ SplitDNSConfigProcessor::set(unsigned int id, SplitDNSConfigInfo * info) idx = id - 1; do { - old_info = (SplitDNSConfigInfo *) infos[idx]; - } while (!ink_atomic_cas_ptr((pvvoidp) & infos[idx], old_info, info)); + old_info = infos[idx]; + } while (!ink_atomic_cas( &infos[idx], old_info, info)); if (old_info) { eventProcessor.schedule_in(NEW(new SplitDNSConfigInfoReleaser(id, old_info)), HRTIME_SECONDS(60)); http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/iocore/eventsystem/P_IOBuffer.h ---------------------------------------------------------------------- diff --git a/iocore/eventsystem/P_IOBuffer.h b/iocore/eventsystem/P_IOBuffer.h index f941933..f626308 100644 --- a/iocore/eventsystem/P_IOBuffer.h +++ b/iocore/eventsystem/P_IOBuffer.h @@ -150,10 +150,10 @@ iobuffer_mem_inc(const char *_loc, int64_t _size_index) Resource *res = res_lookup(_loc); ink_debug_assert(strcmp(_loc, res->path) == 0); #ifdef DEBUG - int64_t r = ink_atomic_increment64(&res->value, index_to_buffer_size(_size_index)); + int64_t r = ink_atomic_increment(&res->value, index_to_buffer_size(_size_index)); ink_debug_assert(r >= 0); #else - ink_atomic_increment64(&res->value, index_to_buffer_size(_size_index)); + ink_atomic_increment(&res->value, index_to_buffer_size(_size_index)); #endif } @@ -170,10 +170,10 @@ iobuffer_mem_dec(const char *_loc, int64_t _size_index) Resource *res = res_lookup(_loc); ink_debug_assert(strcmp(_loc, res->path) == 0); #ifdef DEBUG - int64_t r = ink_atomic_increment64(&res->value, -index_to_buffer_size(_size_index)); + int64_t r = ink_atomic_increment(&res->value, -index_to_buffer_size(_size_index)); ink_debug_assert(r >= index_to_buffer_size(_size_index)); #else - ink_atomic_increment64(&res->value, -index_to_buffer_size(_size_index)); + ink_atomic_increment(&res->value, -index_to_buffer_size(_size_index)); #endif } #endif http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/iocore/net/UnixUDPNet.cc ---------------------------------------------------------------------- diff --git a/iocore/net/UnixUDPNet.cc b/iocore/net/UnixUDPNet.cc index 423bd6c..c939f0f 100644 --- a/iocore/net/UnixUDPNet.cc +++ b/iocore/net/UnixUDPNet.cc @@ -701,7 +701,7 @@ UDPNetProcessor::AllocBandwidth(Continuation * udpConn, double desiredMbps) } udpIntConn->flowRateBps = (desiredMbps * 1024.0 * 1024.0) / 8.0; udpIntConn->allocedbps = desiredbps; - ink_atomic_increment64(&G_inkPipeInfo.perPipeInfo[udpIntConn->pipe_class].bwAlloc, desiredbps); + ink_atomic_increment(&G_inkPipeInfo.perPipeInfo[udpIntConn->pipe_class].bwAlloc, desiredbps); Debug("udpnet-admit", "Admitting flow with %lf Mbps (a=%" PRId64 ", lim=%" PRId64 ")", desiredMbps, G_inkPipeInfo.perPipeInfo[udpIntConn->pipe_class].bwAlloc, @@ -729,7 +729,7 @@ UDPNetProcessor::ChangeBandwidth(Continuation * udpConn, double desiredMbps) } udpIntConn->flowRateBps = (desiredMbps * 1024.0 * 1024.0) / 8.0; udpIntConn->allocedbps = desiredbps; - ink_atomic_increment64(&G_inkPipeInfo.perPipeInfo[udpIntConn->pipe_class].bwAlloc, desiredbps - oldbps); + ink_atomic_increment(&G_inkPipeInfo.perPipeInfo[udpIntConn->pipe_class].bwAlloc, desiredbps - oldbps); Debug("udpnet-admit", "Changing flow's b/w from %lf Mbps to %lf Mbps (a=%" PRId64 ", lim=%" PRId64 ")", (double) oldbps / (1024.0 * 1024.0), desiredMbps, @@ -753,7 +753,7 @@ UDPNetProcessor::FreeBandwidth(Continuation * udpConn) if (bps <= 0) return; - ink_atomic_increment64(&G_inkPipeInfo.perPipeInfo[udpIntConn->pipe_class].bwAlloc, -bps); + ink_atomic_increment(&G_inkPipeInfo.perPipeInfo[udpIntConn->pipe_class].bwAlloc, -bps); Debug("udpnet-free", "Releasing %lf Kbps", bps / 1024.0); http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/lib/records/RecCore.cc ---------------------------------------------------------------------- diff --git a/lib/records/RecCore.cc b/lib/records/RecCore.cc index 83a1574..d9215ed 100644 --- a/lib/records/RecCore.cc +++ b/lib/records/RecCore.cc @@ -97,7 +97,7 @@ link_int(const char *name, RecDataT data_type, RecData data, void *cookie) REC_NOWARN_UNUSED(name); REC_NOWARN_UNUSED(data_type); RecInt *rec_int = (RecInt *) cookie; - ink_atomic_swap64(rec_int, data.rec_int); + ink_atomic_swap(rec_int, data.rec_int); return REC_ERR_OKAY; } @@ -134,7 +134,7 @@ link_counter(const char *name, RecDataT data_type, RecData data, void *cookie) REC_NOWARN_UNUSED(name); REC_NOWARN_UNUSED(data_type); RecCounter *rec_counter = (RecCounter *) cookie; - ink_atomic_swap64(rec_counter, data.rec_counter); + ink_atomic_swap(rec_counter, data.rec_counter); return REC_ERR_OKAY; } @@ -148,7 +148,7 @@ link_byte(const char *name, RecDataT data_type, RecData data, void *cookie) RecByte *rec_byte = (RecByte *) cookie; RecByte byte = static_cast<RecByte>(data.rec_int); - ink_atomic_swap8(rec_byte, byte); + ink_atomic_swap(rec_byte, byte); return REC_ERR_OKAY; } @@ -188,7 +188,7 @@ RecCoreInit(RecModeT mode_type, Diags *_diags) } // set our diags - ink_atomic_swap_ptr(&g_diags, _diags); + ink_atomic_swap(&g_diags, _diags); g_records_tree = new RecTree(NULL); g_num_records = 0; @@ -251,7 +251,7 @@ RecSetDiags(Diags * _diags) { // Warning! It's very dangerous to change diags on the fly! This // function only exists so that we can boot-strap TM on startup. - ink_atomic_swap_ptr(&g_diags, _diags); + ink_atomic_swap(&g_diags, _diags); return REC_ERR_OKAY; } http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/lib/records/RecProcess.cc ---------------------------------------------------------------------- diff --git a/lib/records/RecProcess.cc b/lib/records/RecProcess.cc index 985173c..b27fb93 100644 --- a/lib/records/RecProcess.cc +++ b/lib/records/RecProcess.cc @@ -122,12 +122,12 @@ raw_stat_sync_to_global(RecRawStatBlock *rsb, int id) //rsb, id, delta.sum, total.sum, rsb->global[id]->last_sum, rsb->global[id]->sum); // increment the global values by the delta - ink_atomic_increment64(&(rsb->global[id]->sum), delta.sum); - ink_atomic_increment64(&(rsb->global[id]->count), delta.count); + ink_atomic_increment(&(rsb->global[id]->sum), delta.sum); + ink_atomic_increment(&(rsb->global[id]->count), delta.count); // set the new totals as the last values seen - ink_atomic_swap64(&(rsb->global[id]->last_sum), total.sum); - ink_atomic_swap64(&(rsb->global[id]->last_count), total.count); + ink_atomic_swap(&(rsb->global[id]->last_sum), total.sum); + ink_atomic_swap(&(rsb->global[id]->last_count), total.count); ink_mutex_release(&(rsb->mutex)); @@ -146,15 +146,15 @@ raw_stat_clear_sum(RecRawStatBlock *rsb, int id) // the globals need to be reset too // lock so the setting of the globals and last values are atomic ink_mutex_acquire(&(rsb->mutex)); - ink_atomic_swap64(&(rsb->global[id]->sum), 0); - ink_atomic_swap64(&(rsb->global[id]->last_sum), 0); + ink_atomic_swap(&(rsb->global[id]->sum), (int64_t)0); + ink_atomic_swap(&(rsb->global[id]->last_sum), (int64_t)0); ink_mutex_release(&(rsb->mutex)); // reset the local stats RecRawStat *tlp; for (int i = 0; i < eventProcessor.n_ethreads; i++) { tlp = ((RecRawStat *) ((char *) (eventProcessor.all_ethreads[i]) + rsb->ethr_stat_offset)) + id; - ink_atomic_swap64(&(tlp->sum), 0); + ink_atomic_swap(&(tlp->sum), (int64_t)0); } return REC_ERR_OKAY; } @@ -171,15 +171,15 @@ raw_stat_clear_count(RecRawStatBlock *rsb, int id) // the globals need to be reset too // lock so the setting of the globals and last values are atomic ink_mutex_acquire(&(rsb->mutex)); - ink_atomic_swap64(&(rsb->global[id]->count), 0); - ink_atomic_swap64(&(rsb->global[id]->last_count), 0); + ink_atomic_swap(&(rsb->global[id]->count), (int64_t)0); + ink_atomic_swap(&(rsb->global[id]->last_count), (int64_t)0); ink_mutex_release(&(rsb->mutex)); // reset the local stats RecRawStat *tlp; for (int i = 0; i < eventProcessor.n_ethreads; i++) { tlp = ((RecRawStat *) ((char *) (eventProcessor.all_ethreads[i]) + rsb->ethr_stat_offset)) + id; - ink_atomic_swap64(&(tlp->count), 0); + ink_atomic_swap(&(tlp->count), (int64_t)0); } return REC_ERR_OKAY; } @@ -606,7 +606,7 @@ int RecSetRawStatSum(RecRawStatBlock *rsb, int id, int64_t data) { raw_stat_clear_sum(rsb, id); - ink_atomic_swap64(&(rsb->global[id]->sum), data); + ink_atomic_swap(&(rsb->global[id]->sum), data); return REC_ERR_OKAY; } @@ -614,7 +614,7 @@ int RecSetRawStatCount(RecRawStatBlock *rsb, int id, int64_t data) { raw_stat_clear_count(rsb, id); - ink_atomic_swap64(&(rsb->global[id]->count), data); + ink_atomic_swap(&(rsb->global[id]->count), data); return REC_ERR_OKAY; } @@ -658,22 +658,22 @@ RecGetRawStatCount(RecRawStatBlock *rsb, int id, int64_t *data) int RecIncrGlobalRawStat(RecRawStatBlock *rsb, int id, int64_t incr) { - ink_atomic_increment64(&(rsb->global[id]->sum), incr); - ink_atomic_increment64(&(rsb->global[id]->count), 1); + ink_atomic_increment(&(rsb->global[id]->sum), incr); + ink_atomic_increment(&(rsb->global[id]->count), 1); return REC_ERR_OKAY; } int RecIncrGlobalRawStatSum(RecRawStatBlock *rsb, int id, int64_t incr) { - ink_atomic_increment64(&(rsb->global[id]->sum), incr); + ink_atomic_increment(&(rsb->global[id]->sum), incr); return REC_ERR_OKAY; } int RecIncrGlobalRawStatCount(RecRawStatBlock *rsb, int id, int64_t incr) { - ink_atomic_increment64(&(rsb->global[id]->count), incr); + ink_atomic_increment(&(rsb->global[id]->count), incr); return REC_ERR_OKAY; } @@ -684,14 +684,14 @@ RecIncrGlobalRawStatCount(RecRawStatBlock *rsb, int id, int64_t incr) int RecSetGlobalRawStatSum(RecRawStatBlock *rsb, int id, int64_t data) { - ink_atomic_swap64(&(rsb->global[id]->sum), data); + ink_atomic_swap(&(rsb->global[id]->sum), data); return REC_ERR_OKAY; } int RecSetGlobalRawStatCount(RecRawStatBlock *rsb, int id, int64_t data) { - ink_atomic_swap64(&(rsb->global[id]->count), data); + ink_atomic_swap(&(rsb->global[id]->count), data); return REC_ERR_OKAY; } http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/lib/ts/ink_atomic.h ---------------------------------------------------------------------- diff --git a/lib/ts/ink_atomic.h b/lib/ts/ink_atomic.h index 3e358c6..3d3f8b2 100644 --- a/lib/ts/ink_atomic.h +++ b/lib/ts/ink_atomic.h @@ -50,12 +50,14 @@ typedef volatile int8_t vint8; typedef volatile int16_t vint16; typedef volatile int32_t vint32; typedef volatile int64_t vint64; +typedef volatile long vlong; typedef volatile void *vvoidp; typedef vint8 *pvint8; typedef vint16 *pvint16; typedef vint32 *pvint32; typedef vint64 *pvint64; +typedef vlong *pvlong; typedef vvoidp *pvvoidp; // Sun/Solaris and the SunPRO compiler @@ -76,51 +78,58 @@ typedef vuint64_s *pvuint64_s; #include <atomic.h> -static inline int8_t ink_atomic_swap8(pvint8 mem, int8_t value) { return (int8_t)atomic_swap_8((pvuint8)mem, (uint8_t)value); } -static inline int16_t ink_atomic_swap16(pvint16 mem, int16_t value) { return (int16_t)atomic_swap_16((pvuint16)mem, (uint16_t)value); } -static inline int32_t ink_atomic_swap32(pvint32 mem, int32_t value) { return (int32_t)atomic_swap_32((pvuint32)mem, (uint32_t)value); } - +static inline int8_t ink_atomic_swap(pvint8 mem, int8_t value) { return (int8_t)atomic_swap_8((pvuint8)mem, (uint8_t)value); } +static inline int16_t ink_atomic_swap(pvint16 mem, int16_t value) { return (int16_t)atomic_swap_16((pvuint16)mem, (uint16_t)value); } static inline int32_t ink_atomic_swap(pvint32 mem, int32_t value) { return (int32_t)atomic_swap_32((pvuint32)mem, (uint32_t)value); } -static inline int64_t ink_atomic_swap64(pvint64 mem, int64_t value) { return (int64_t)atomic_swap_64((pvuint64_s)mem, (uint64_s)value); } -static inline void *ink_atomic_swap_ptr(vvoidp mem, void *value) { return atomic_swap_ptr((vvoidp)mem, value); } +static inline int64_t ink_atomic_swap(pvint64 mem, int64_t value) { return (int64_t)atomic_swap_64((pvuint64_s)mem, (uint64_s)value); } +static inline void * ink_atomic_swap(vvoidp mem, void *value) { return atomic_swap_ptr((vvoidp)mem, value); } static inline int ink_atomic_cas(pvint32 mem, int old, int new_value) { return atomic_cas_32((pvuint32)mem, (uint32_t)old, (uint32_t)new_value) == old; } -static inline int ink_atomic_cas64(pvint64 mem, int64_t old, int64_t new_value) { return atomic_cas_64((pvuint64_s)mem, (uint64_s)old, (uint64_s)new_value) == old; } -static inline int ink_atomic_cas_ptr(pvvoidp mem, void* old, void* new_value) { return atomic_cas_ptr((vvoidp)mem, old, new_value) == old; } -static inline int ink_atomic_increment(pvint32 mem, int value) { return ((uint32_t)atomic_add_32_nv((pvuint32)mem, (uint32_t)value)) - value; } -static inline int64_t ink_atomic_increment64(pvint64 mem, int64_t value) { return ((uint64_s)atomic_add_64_nv((pvuint64_s)mem, (uint64_s)value)) - value; } -static inline void *ink_atomic_increment_ptr(pvvoidp mem, intptr_t value) { return (void*)(((char*)atomic_add_ptr_nv((vvoidp)mem, (ssize_t)value)) - value); } +static inline int ink_atomic_cas(pvint64 mem, int64_t old, int64_t new_value) { return atomic_cas_64((pvuint64_s)mem, (uint64_s)old, (uint64_s)new_value) == old; } +static inline int ink_atomic_cas(pvvoidp mem, void* old, void* new_value) { return atomic_cas_ptr((vvoidp)mem, old, new_value) == old; } + +static inline int ink_atomic_increment(pvint32 mem, int value) { return ((uint32_t)atomic_add_32_nv((pvuint32)mem, (uint32_t)value)) - value; } +static inline int64_t ink_atomic_increment(pvint64 mem, int64_t value) { return ((uint64_s)atomic_add_64_nv((pvuint64_s)mem, (uint64_s)value)) - value; } +static inline void * ink_atomic_increment(pvvoidp mem, intptr_t value) { return (void*)(((char*)atomic_add_ptr_nv((vvoidp)mem, (ssize_t)value)) - value); } /* not used for Intel Processors or Sparc which are mostly sequentally consistent */ #define INK_WRITE_MEMORY_BARRIER #define INK_MEMORY_BARRIER -#else /* ! defined(__SUNPRO_CC) */ - /* GCC compiler >= 4.1 */ -#if defined(__GNUC__) && (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 1) +#elif defined(__GNUC__) && (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 1) /* see http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html */ -static inline int8_t ink_atomic_swap8(pvint8 mem, int8_t value) { return __sync_lock_test_and_set(mem, value); } -static inline int16_t ink_atomic_swap16(pvint16 mem, int16_t value) { return __sync_lock_test_and_set(mem, value); } -static inline int32_t ink_atomic_swap32(pvint32 mem, int32_t value) { return __sync_lock_test_and_set(mem, value); } - -static inline int32_t ink_atomic_swap(pvint32 mem, int32_t value) { return __sync_lock_test_and_set(mem, value); } -static inline void *ink_atomic_swap_ptr(vvoidp mem, void *value) { return __sync_lock_test_and_set((void**)mem, value); } +// ink_atomic_swap(ptr, value) +// Writes @value into @ptr, returning the previous value. +template <typename T> static inline T +ink_atomic_swap(volatile T * mem, T value) { + return __sync_lock_test_and_set(mem, value); +} -static inline int ink_atomic_cas(pvint32 mem, int old, int new_value) { return __sync_bool_compare_and_swap(mem, old, new_value); } -static inline int ink_atomic_cas_ptr(pvvoidp mem, void* old, void* new_value) { return __sync_bool_compare_and_swap(mem, old, new_value); } +// ink_atomic_cas(mem, prev, next) +// Atomically store the value @next into the pointer @mem, but only if the current value at @mem is @prev. +// Returns true if @next was successfully stored. +template <typename T> static inline bool +ink_atomic_cas(volatile T * mem, T prev, T next) { + return __sync_bool_compare_and_swap(mem, prev, next); +} -static inline int ink_atomic_increment(pvint32 mem, int value) { return __sync_fetch_and_add(mem, value); } -static inline void *ink_atomic_increment_ptr(pvvoidp mem, intptr_t value) { return __sync_fetch_and_add((void**)mem, (void*)value); } +// ink_atomic_increment(ptr, count) +// Increment @ptr by @count, returning the previous value. +template <typename Type, typename Amount> static inline Type +ink_atomic_increment(volatile Type * mem, Amount count) { + return __sync_fetch_and_add(mem, (Type)count); +} // Special hacks for ARM 32-bit #if defined(__arm__) && (SIZEOF_VOIDP == 4) extern ProcessMutex __global_death; +template<> static inline int64_t -ink_atomic_swap64(pvint64 mem, int64_t value) { +ink_atomic_swap<int64_t>(pvint64 mem, int64_t value) { int64_t old; ink_mutex_acquire(&__global_death); old = *mem; @@ -128,8 +137,10 @@ ink_atomic_swap64(pvint64 mem, int64_t value) { ink_mutex_release(&__global_death); return old; } + +template<> static inline int64_t -ink_atomic_cas64(pvint64 mem, int64_t old, int64_t new_value) { +ink_atomic_cas<int64_t>(pvint64 mem, int64_t old, int64_t new_value) { int64_t curr; ink_mutex_acquire(&__global_death); curr = *mem; @@ -138,8 +149,10 @@ ink_atomic_cas64(pvint64 mem, int64_t old, int64_t new_value) { if(old == curr) return 1; return 0; } + +template<> static inline int64_t -ink_atomic_increment64(pvint64 mem, int64_t value) { +ink_atomic_increment<int64_t>(pvint64 mem, int64_t value) { int64_t curr; ink_mutex_acquire(&__global_death); curr = *mem; @@ -148,10 +161,6 @@ ink_atomic_increment64(pvint64 mem, int64_t value) { return curr + value; } -#else /* Intel 64-bit operations */ -static inline int64_t ink_atomic_swap64(pvint64 mem, int64_t value) { return __sync_lock_test_and_set(mem, value); } -static inline int64_t ink_atomic_cas64(pvint64 mem, int64_t old, int64_t new_value) { return __sync_bool_compare_and_swap(mem, old, new_value); } -static inline int64_t ink_atomic_increment64(pvint64 mem, int64_t value) { return __sync_fetch_and_add(mem, value); } #endif /* not used for Intel Processors which have sequential(esque) consistency */ @@ -162,6 +171,4 @@ static inline int64_t ink_atomic_increment64(pvint64 mem, int64_t value) { retur #error Need a compiler / libc that supports atomic operations, e.g. gcc v4.1.2 or later #endif -#endif /* SunPRO CC */ - #endif /* _ink_atomic_h_ */ http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/lib/ts/ink_queue.cc ---------------------------------------------------------------------- diff --git a/lib/ts/ink_queue.cc b/lib/ts/ink_queue.cc index e9cc992..73435e0 100644 --- a/lib/ts/ink_queue.cc +++ b/lib/ts/ink_queue.cc @@ -84,7 +84,7 @@ static ink_freelist_list *freelists = NULL; inkcoreapi volatile int64_t freelist_allocated_mem = 0; #define fl_memadd(_x_) \ - ink_atomic_increment64(&freelist_allocated_mem, (int64_t) (_x_)); + ink_atomic_increment(&freelist_allocated_mem, (int64_t) (_x_)); void @@ -172,7 +172,7 @@ ink_freelist_new(InkFreeList * f) SET_FREELIST_POINTER_VERSION(item, newp, 0); ink_atomic_increment((int *) &f->allocated, f->chunk_size); - ink_atomic_increment64(&fastalloc_mem_total, (int64_t) f->chunk_size * f->type_size); + ink_atomic_increment(&fastalloc_mem_total, (int64_t) f->chunk_size * f->type_size); /* free each of the new elements */ for (i = 0; i < f->chunk_size; i++) { @@ -193,12 +193,12 @@ ink_freelist_new(InkFreeList * f) } ink_atomic_increment((int *) &f->count, f->chunk_size); - ink_atomic_increment64(&fastalloc_mem_in_use, (int64_t) f->chunk_size * f->type_size); + ink_atomic_increment(&fastalloc_mem_in_use, (int64_t) f->chunk_size * f->type_size); } else { SET_FREELIST_POINTER_VERSION(next, *ADDRESS_OF_NEXT(TO_PTR(FREELIST_POINTER(item)), f->offset), FREELIST_VERSION(item) + 1); - result = ink_atomic_cas64((int64_t *) & f->head.data, item.data, next.data); + result = ink_atomic_cas((int64_t *) & f->head.data, item.data, next.data); #ifdef SANITY if (result) { @@ -217,7 +217,7 @@ ink_freelist_new(InkFreeList * f) ink_assert(!((uintptr_t)TO_PTR(FREELIST_POINTER(item))&(((uintptr_t)f->alignment)-1))); ink_atomic_increment((int *) &f->count, 1); - ink_atomic_increment64(&fastalloc_mem_in_use, (int64_t) f->type_size); + ink_atomic_increment(&fastalloc_mem_in_use, (int64_t) f->type_size); return TO_PTR(FREELIST_POINTER(item)); #else // ! TS_USE_FREELIST @@ -267,12 +267,12 @@ ink_freelist_free(InkFreeList * f, void *item) *adr_of_next = FREELIST_POINTER(h); SET_FREELIST_POINTER_VERSION(item_pair, FROM_PTR(item), FREELIST_VERSION(h)); INK_MEMORY_BARRIER; - result = ink_atomic_cas64((int64_t *) & f->head, h.data, item_pair.data); + result = ink_atomic_cas((int64_t *) & f->head, h.data, item_pair.data); } while (result == 0); ink_atomic_increment((int *) &f->count, -1); - ink_atomic_increment64(&fastalloc_mem_in_use, -(int64_t) f->type_size); + ink_atomic_increment(&fastalloc_mem_in_use, -(int64_t) f->type_size); #else if (f->alignment) ats_memalign_free(item); @@ -378,7 +378,7 @@ ink_atomiclist_pop(InkAtomicList * l) SET_FREELIST_POINTER_VERSION(next, *ADDRESS_OF_NEXT(TO_PTR(FREELIST_POINTER(item)), l->offset), FREELIST_VERSION(item) + 1); #if !defined(INK_USE_MUTEX_FOR_ATOMICLISTS) - result = ink_atomic_cas64((int64_t *) & l->head.data, item.data, next.data); + result = ink_atomic_cas((int64_t *) & l->head.data, item.data, next.data); #else l->head.data = next.data; result = 1; @@ -410,7 +410,7 @@ ink_atomiclist_popall(InkAtomicList * l) return NULL; SET_FREELIST_POINTER_VERSION(next, FROM_PTR(NULL), FREELIST_VERSION(item) + 1); #if !defined(INK_USE_MUTEX_FOR_ATOMICLISTS) - result = ink_atomic_cas64((int64_t *) & l->head.data, item.data, next.data); + result = ink_atomic_cas((int64_t *) & l->head.data, item.data, next.data); #else l->head.data = next.data; result = 1; @@ -453,7 +453,7 @@ ink_atomiclist_push(InkAtomicList * l, void *item) SET_FREELIST_POINTER_VERSION(item_pair, FROM_PTR(item), FREELIST_VERSION(head)); INK_MEMORY_BARRIER; #if !defined(INK_USE_MUTEX_FOR_ATOMICLISTS) - result = ink_atomic_cas64((int64_t *) & l->head, head.data, item_pair.data); + result = ink_atomic_cas((int64_t *) & l->head, head.data, item_pair.data); #else l->head.data = item_pair.data; result = 1; @@ -487,7 +487,7 @@ ink_atomiclist_remove(InkAtomicList * l, void *item) head_p next; SET_FREELIST_POINTER_VERSION(next, item_next, FREELIST_VERSION(head) + 1); #if !defined(INK_USE_MUTEX_FOR_ATOMICLISTS) - result = ink_atomic_cas64((int64_t *) & l->head.data, head.data, next.data); + result = ink_atomic_cas((int64_t *) & l->head.data, head.data, next.data); #else l->head.data = next.data; result = 1; http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/lib/ts/test_atomic.cc ---------------------------------------------------------------------- diff --git a/lib/ts/test_atomic.cc b/lib/ts/test_atomic.cc index 26830ef..7a29c88 100644 --- a/lib/ts/test_atomic.cc +++ b/lib/ts/test_atomic.cc @@ -159,11 +159,11 @@ main(int argc, const char *argv[]) printf("changed to: %d, result=%s\n", m, n ? "true" : "false"); printf("CAS pointer: '%s' == 'hello' then 'new'\n", m2); - n = ink_atomic_cas_ptr((pvvoidp) &m2, (char *) "hello", (char *) "new"); + n = ink_atomic_cas( &m2, "hello", "new"); printf("changed to: %s, result=%s\n", m2, n ? (char *) "true" : (char *) "false"); printf("CAS pointer: '%s' == 'hello' then 'new2'\n", m2); - n = ink_atomic_cas_ptr((pvvoidp)&m2, (char*)m2, (char *) "new2"); + n = ink_atomic_cas(&m2, m2, "new2"); printf("changed to: %s, result=%s\n", m2, n ? "true" : "false"); n = 100; @@ -173,7 +173,7 @@ main(int argc, const char *argv[]) printf("Atomic Fetch-and-Add 2 to pointer to '%s'\n", m2); - n2 = (char *)ink_atomic_increment_ptr((pvvoidp)&m2, 2); + n2 = (char *)ink_atomic_increment((pvvoidp)&m2, (void *)2); printf("changed to: %s, result=%s\n", m2, n2); printf("Testing atomic lists\n"); http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/plugins/experimental/geoip_acl/lulu.h ---------------------------------------------------------------------- diff --git a/plugins/experimental/geoip_acl/lulu.h b/plugins/experimental/geoip_acl/lulu.h index 967057e..b6ba7bb 100644 --- a/plugins/experimental/geoip_acl/lulu.h +++ b/plugins/experimental/geoip_acl/lulu.h @@ -71,14 +71,14 @@ typedef vvoidp *pvvoidp; /* see http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html */ static inline int32 ink_atomic_swap(pvint32 mem, int32 value) { return __sync_lock_test_and_set(mem, value); } -static inline int64 ink_atomic_swap64(pvint64 mem, int64 value) { return __sync_lock_test_and_set(mem, value); } -static inline void *ink_atomic_swap_ptr(vvoidp mem, void *value) { return __sync_lock_test_and_set((void**)mem, value); } +static inline int64 ink_atomic_swap(pvint64 mem, int64 value) { return __sync_lock_test_and_set(mem, value); } +static inline void *ink_atomic_swap(vvoidp mem, void *value) { return __sync_lock_test_and_set((void**)mem, value); } static inline int ink_atomic_cas(pvint32 mem, int old, int new_value) { return __sync_bool_compare_and_swap(mem, old, new_value); } -static inline int64 ink_atomic_cas64(pvint64 mem, int64 old, int64 new_value) { return __sync_bool_compare_and_swap(mem, old, new_value); } -static inline int ink_atomic_cas_ptr(pvvoidp mem, void* old, void* new_value) { return __sync_bool_compare_and_swap(mem, old, new_value); } +static inline int64 ink_atomic_cas(pvint64 mem, int64 old, int64 new_value) { return __sync_bool_compare_and_swap(mem, old, new_value); } +static inline int ink_atomic_cas(pvvoidp mem, void* old, void* new_value) { return __sync_bool_compare_and_swap(mem, old, new_value); } static inline int ink_atomic_increment(pvint32 mem, int value) { return __sync_fetch_and_add(mem, value); } -static inline int64 ink_atomic_increment64(pvint64 mem, int64 value) { return __sync_fetch_and_add(mem, value); } -static inline void *ink_atomic_increment_ptr(pvvoidp mem, intptr_t value) { return __sync_fetch_and_add((void**)mem, value); } +static inline int64 ink_atomic_increment(pvint64 mem, int64 value) { return __sync_fetch_and_add(mem, value); } +static inline void *ink_atomic_increment(pvvoidp mem, intptr_t value) { return __sync_fetch_and_add((void**)mem, value); } #else // TODO: Deal with this case? #failure http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/AbstractBuffer.h ---------------------------------------------------------------------- diff --git a/proxy/AbstractBuffer.h b/proxy/AbstractBuffer.h index fefa6fb..30e5b61 100644 --- a/proxy/AbstractBuffer.h +++ b/proxy/AbstractBuffer.h @@ -174,7 +174,7 @@ private: inline bool AbstractBuffer::switch_state(VolatileState & old_vs, VolatileState & new_vs) { - if (ink_atomic_cas64((int64_t *) & vs.ival, old_vs.ival, new_vs.ival)) { + if (ink_atomic_cas((int64_t *) & vs.ival, old_vs.ival, new_vs.ival)) { return true; } http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/CacheControl.cc ---------------------------------------------------------------------- diff --git a/proxy/CacheControl.cc b/proxy/CacheControl.cc index 9e87e76..abbe7c4 100644 --- a/proxy/CacheControl.cc +++ b/proxy/CacheControl.cc @@ -175,7 +175,7 @@ reloadCacheControl() Debug("cache_control", "cache.config updated, reloading"); eventProcessor.schedule_in(NEW(new CC_FreerContinuation(CacheControlTable)), CACHE_CONTROL_TIMEOUT, ET_CACHE); newTable = NEW(new CC_table("proxy.config.cache.control.filename", modulePrefix, &http_dest_tags)); - ink_atomic_swap_ptr(&CacheControlTable, newTable); + ink_atomic_swap(&CacheControlTable, newTable); } void http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/IPAllow.cc ---------------------------------------------------------------------- diff --git a/proxy/IPAllow.cc b/proxy/IPAllow.cc index 85985e7..ab2843b 100644 --- a/proxy/IPAllow.cc +++ b/proxy/IPAllow.cc @@ -143,7 +143,7 @@ IpAllow::ReloadInstance() { new_table = NEW(new self("proxy.config.cache.ip_allow.filename", "IpAllow", "ip_allow")); new_table->BuildTable(); - ink_atomic_swap_ptr(_instance, new_table); + ink_atomic_swap(&_instance, new_table); } // http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/ParentSelection.cc ---------------------------------------------------------------------- diff --git a/proxy/ParentSelection.cc b/proxy/ParentSelection.cc index 94bcec1..2fd86b4 100644 --- a/proxy/ParentSelection.cc +++ b/proxy/ParentSelection.cc @@ -340,7 +340,7 @@ ParentConfigParams::recordRetrySuccess(ParentResult * result) ink_assert((int) (result->last_parent) < result->rec->num_parents); pRec = result->rec->parents + result->last_parent; - ink_atomic_swap(&pRec->failedAt, 0); + ink_atomic_swap(&pRec->failedAt, (time_t)0); int old_count = ink_atomic_swap(&pRec->failCount, 0); if (old_count > 0) { @@ -551,12 +551,12 @@ ParentRecord::FindParent(bool first_call, ParentResult * result, RD * rdata, Par if ((parents[cur_index].failedAt == 0) || (parents[cur_index].failCount < config->FailThreshold)) { Debug("parent_select", "config->FailThreshold = %d", config->FailThreshold); Debug("parent_select", "Selecting a down parent due to little failCount" - "(faileAt: %u failCount: %d)", parents[cur_index].failedAt, parents[cur_index].failCount); + "(faileAt: %u failCount: %d)", (unsigned)parents[cur_index].failedAt, parents[cur_index].failCount); parentUp = true; } else { if ((result->wrap_around) || ((parents[cur_index].failedAt + config->ParentRetryTime) < request_info->xact_start)) { Debug("parent_select", "Parent[%d].failedAt = %u, retry = %u,xact_start = %" PRId64 " but wrap = %d", cur_index, - parents[cur_index].failedAt, config->ParentRetryTime, (int64_t)request_info->xact_start, result->wrap_around); + (unsigned)parents[cur_index].failedAt, config->ParentRetryTime, (int64_t)request_info->xact_start, result->wrap_around); // Reuse the parent parentUp = true; parentRetry = true; http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/ParentSelection.h ---------------------------------------------------------------------- diff --git a/proxy/ParentSelection.h b/proxy/ParentSelection.h index 427655e..a6f2d2a 100644 --- a/proxy/ParentSelection.h +++ b/proxy/ParentSelection.h @@ -159,7 +159,7 @@ struct pRecord { char hostname[MAXDNAME + 1]; int port; - int32_t failedAt; + time_t failedAt; int failCount; int32_t upAt; const char *scheme; // for which parent matches (if any) http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/ProxyConfig.cc ---------------------------------------------------------------------- diff --git a/proxy/ProxyConfig.cc b/proxy/ProxyConfig.cc index 2b2dd0a..593b0ae 100644 --- a/proxy/ProxyConfig.cc +++ b/proxy/ProxyConfig.cc @@ -149,7 +149,7 @@ ConfigProcessor::set(unsigned int id, ConfigInfo * info) do { old_info = (ConfigInfo *) infos[idx]; - } while (!ink_atomic_cas_ptr((pvvoidp) & infos[idx], old_info, info)); + } while (!ink_atomic_cas( & infos[idx], old_info, info)); if (old_info) { eventProcessor.schedule_in(NEW(new ConfigInfoReleaser(id, old_info)), HRTIME_SECONDS(60)); http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/ProxyConfig.h ---------------------------------------------------------------------- diff --git a/proxy/ProxyConfig.h b/proxy/ProxyConfig.h index 550ccae..f7ad0ab 100644 --- a/proxy/ProxyConfig.h +++ b/proxy/ProxyConfig.h @@ -74,8 +74,8 @@ public: void release(unsigned int id, ConfigInfo * data); public: - volatile ConfigInfo *infos[MAX_CONFIGS]; - volatile int ninfos; + ConfigInfo *infos[MAX_CONFIGS]; + int ninfos; }; http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/ReverseProxy.cc ---------------------------------------------------------------------- diff --git a/proxy/ReverseProxy.cc b/proxy/ReverseProxy.cc index 185f3c5..84ef480 100644 --- a/proxy/ReverseProxy.cc +++ b/proxy/ReverseProxy.cc @@ -191,7 +191,7 @@ reloadUrlRewrite() if (newTable->is_valid()) { eventProcessor.schedule_in(new UR_FreerContinuation(rewrite_table), URL_REWRITE_TIMEOUT, ET_TASK); Debug("url_rewrite", "remap.config done reloading!"); - ink_atomic_swap_ptr(&rewrite_table, newTable); + ink_atomic_swap(&rewrite_table, newTable); } else { static const char* msg = "failed to reload remap.config, not replacing!"; delete newTable; http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/StatSystem.cc ---------------------------------------------------------------------- diff --git a/proxy/StatSystem.cc b/proxy/StatSystem.cc index e643edc..e53617c 100644 --- a/proxy/StatSystem.cc +++ b/proxy/StatSystem.cc @@ -522,7 +522,7 @@ initialize_all_global_stats() // TODO: HMMMM, wtf does this do? The following is that this // function does: - // ink_atomic_swap_ptr(&this->f_update_lock, (void *) func) + // ink_atomic_swap(&this->f_update_lock, (void *) func) // // pmgmt->record_data->registerUpdateLockFunc(tmp_stats_lock_function); @@ -577,7 +577,7 @@ dyn_stats_count_cb(void *data, void *res) READ_DYN_STAT((long) data, count, sum); NOWARN_UNUSED(sum); //*(ink_statval_t *)res = count; - ink_atomic_swap64((ink_statval_t *) res, count); + ink_atomic_swap((ink_statval_t *) res, count); return res; } @@ -588,7 +588,7 @@ dyn_stats_sum_cb(void *data, void *res) READ_DYN_STAT((long) data, count, sum); NOWARN_UNUSED(count); //*(ink_statval_t *)res = sum; - ink_atomic_swap64((ink_statval_t *) res, sum); + ink_atomic_swap((ink_statval_t *) res, sum); return res; } @@ -702,7 +702,7 @@ http_trans_stats_count_cb(void *data, void *res) READ_HTTP_TRANS_STAT((long) data, count, sum); NOWARN_UNUSED(sum); //*(ink_statval_t *)res = count; - ink_atomic_swap64((ink_statval_t *) res, count); + ink_atomic_swap((ink_statval_t *) res, count); return res; } @@ -713,7 +713,7 @@ http_trans_stats_sum_cb(void *data, void *res) READ_HTTP_TRANS_STAT((long) data, count, sum); NOWARN_UNUSED(count); //*(ink_statval_t *)res = sum; - ink_atomic_swap64((ink_statval_t *) res, sum); + ink_atomic_swap((ink_statval_t *) res, sum); return res; } http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/StatSystem.h ---------------------------------------------------------------------- diff --git a/proxy/StatSystem.h b/proxy/StatSystem.h index ccfff96..6d56797 100644 --- a/proxy/StatSystem.h +++ b/proxy/StatSystem.h @@ -389,8 +389,8 @@ mutex->thread_holding->global_dyn_stats[X].count ++; \ mutex->thread_holding->global_dyn_stats[X].sum += (S) #define ADD_TO_GLOBAL_GLOBAL_DYN_SUM(X,S) \ -ink_atomic_increment64(&global_dyn_stats[X].count,(ink_statval_t)1); \ -ink_atomic_increment64(&global_dyn_stats[X].sum,S) +ink_atomic_increment(&global_dyn_stats[X].count,(ink_statval_t)1); \ +ink_atomic_increment(&global_dyn_stats[X].sum,S) /* * global_dyn_stats[X].count ++; \ * global_dyn_stats[X].sum += (S) @@ -450,18 +450,18 @@ global_dyn_stats[X].sum = S #else #define ADD_TO_GLOBAL_DYN_COUNT(X,C) \ -ink_atomic_increment64(&global_dyn_stats[X].count,C) +ink_atomic_increment(&global_dyn_stats[X].count,C) #define ADD_TO_GLOBAL_DYN_SUM(X,S) \ -ink_atomic_increment64(&global_dyn_stats[X].count,(ink_statval_t)1); \ -ink_atomic_increment64(&global_dyn_stats[X].sum,S) +ink_atomic_increment(&global_dyn_stats[X].count,(ink_statval_t)1); \ +ink_atomic_increment(&global_dyn_stats[X].sum,S) #define ADD_TO_GLOBAL_GLOBAL_DYN_SUM(X,S) \ -ink_atomic_increment64(&global_dyn_stats[X].count,(ink_statval_t)1); \ -ink_atomic_increment64(&global_dyn_stats[X].sum,S) +ink_atomic_increment(&global_dyn_stats[X].count,(ink_statval_t)1); \ +ink_atomic_increment(&global_dyn_stats[X].sum,S) #define ADD_TO_GLOBAL_DYN_FSUM(X,S) \ -ink_atomic_increment64(&global_dyn_stats[X].count,(ink_statval_t)1); \ +ink_atomic_increment(&global_dyn_stats[X].count,(ink_statval_t)1); \ (*(double *)&global_dyn_stats[X].sum) += S #define CLEAR_GLOBAL_DYN_STAT(X) \ http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/congest/Congestion.cc ---------------------------------------------------------------------- diff --git a/proxy/congest/Congestion.cc b/proxy/congest/Congestion.cc index 3cb2ed8..9552217 100644 --- a/proxy/congest/Congestion.cc +++ b/proxy/congest/Congestion.cc @@ -433,7 +433,7 @@ reloadCongestionControl() newTable->Print(); #endif new_Deleter(CongestionMatcher, t); - ink_atomic_swap_ptr(&CongestionMatcher, newTable); + ink_atomic_swap(&CongestionMatcher, newTable); if (congestionControlEnabled) { revalidateCongestionDB(); } http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/http/HttpClientSession.cc ---------------------------------------------------------------------- diff --git a/proxy/http/HttpClientSession.cc b/proxy/http/HttpClientSession.cc index ae6652a..7ca304c 100644 --- a/proxy/http/HttpClientSession.cc +++ b/proxy/http/HttpClientSession.cc @@ -195,7 +195,7 @@ HttpClientSession::new_connection(NetVConnection * new_vc, bool backdoor) this->backdoor_connect = backdoor; // Unique client session identifier. - con_id = ink_atomic_increment64((int64_t *) (&next_cs_id), 1); + con_id = ink_atomic_increment((int64_t *) (&next_cs_id), 1); HTTP_INCREMENT_DYN_STAT(http_current_client_connections_stat); conn_decrease = true; http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/http/HttpServerSession.cc ---------------------------------------------------------------------- diff --git a/proxy/http/HttpServerSession.cc b/proxy/http/HttpServerSession.cc index 5ff532e..7898c09 100644 --- a/proxy/http/HttpServerSession.cc +++ b/proxy/http/HttpServerSession.cc @@ -67,7 +67,7 @@ HttpServerSession::new_connection(NetVConnection *new_vc) mutex = new_vc->mutex; // Unique client session identifier. - con_id = ink_atomic_increment64((int64_t *) (&next_ss_id), 1); + con_id = ink_atomic_increment((int64_t *) (&next_ss_id), 1); magic = HTTP_SS_MAGIC_ALIVE; HTTP_SUM_GLOBAL_DYN_STAT(http_current_server_connections_stat, 1); // Update the true global stat http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/http/HttpTransact.cc ---------------------------------------------------------------------- diff --git a/proxy/http/HttpTransact.cc b/proxy/http/HttpTransact.cc index 4d34b01..1d524c9 100644 --- a/proxy/http/HttpTransact.cc +++ b/proxy/http/HttpTransact.cc @@ -8345,13 +8345,8 @@ ink_cluster_time(void) old = global_time; while (local_time > global_time) { - if (sizeof(ink_time_t) == 4) { - if (ink_atomic_cas((int32_t *) & global_time, *((int32_t *) & old), *((int32_t *) & local_time))) - break; - } else if (sizeof(ink_time_t) == 8) { - if (ink_atomic_cas64((int64_t *) & global_time, *((int64_t *) & old), *((int64_t *) & local_time))) - break; - } + if (ink_atomic_cas(&global_time, old, local_time)) + break; old = global_time; } http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/logging/Log.cc ---------------------------------------------------------------------- diff --git a/proxy/logging/Log.cc b/proxy/logging/Log.cc index 9b06b63..14f734a 100644 --- a/proxy/logging/Log.cc +++ b/proxy/logging/Log.cc @@ -124,7 +124,7 @@ Log::change_configuration() // Swap in the new config object // - ink_atomic_swap_ptr((void *) &Log::config, new_config); + ink_atomic_swap(&Log::config, new_config); // Force new buffers for inactive objects // http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/logging/LogBuffer.h ---------------------------------------------------------------------- diff --git a/proxy/logging/LogBuffer.h b/proxy/logging/LogBuffer.h index 279e69c..42b1aa6 100644 --- a/proxy/logging/LogBuffer.h +++ b/proxy/logging/LogBuffer.h @@ -158,7 +158,7 @@ public: int switch_state(LB_State & old_state, LB_State & new_state) { INK_WRITE_MEMORY_BARRIER; - return (ink_atomic_cas64((int64_t *) & m_state.ival, old_state.ival, new_state.ival)); + return (ink_atomic_cas( & m_state.ival, old_state.ival, new_state.ival)); }; LB_ResultCode checkout_write(size_t * write_offset, size_t write_size); http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/logging/LogConfig.cc ---------------------------------------------------------------------- diff --git a/proxy/logging/LogConfig.cc b/proxy/logging/LogConfig.cc index 94160c4..5e2168b 100644 --- a/proxy/logging/LogConfig.cc +++ b/proxy/logging/LogConfig.cc @@ -760,7 +760,7 @@ LogConfig::init(LogConfig * prev_config) new_elog = 0; } } - ink_atomic_swap_ptr((void *) &Log::error_log, new_elog); + ink_atomic_swap(&Log::error_log, new_elog); if (old_elog) { old_elog->force_new_buffer(); Log::add_to_inactive(old_elog); http://git-wip-us.apache.org/repos/asf/trafficserver/blob/76aa879d/proxy/logging/LogObject.cc ---------------------------------------------------------------------- diff --git a/proxy/logging/LogObject.cc b/proxy/logging/LogObject.cc index 2e21f7b..e2e6aec 100644 --- a/proxy/logging/LogObject.cc +++ b/proxy/logging/LogObject.cc @@ -418,7 +418,7 @@ LogObject::_checkout_write(size_t * write_offset, size_t bytes_needed) { INK_QUEUE_LD64(h, m_log_buffer); head_p new_h; SET_FREELIST_POINTER_VERSION(new_h, FREELIST_POINTER(h), FREELIST_VERSION(h) + 1); - result = ink_atomic_cas64((int64_t*)&m_log_buffer.data, h.data, new_h.data); + result = ink_atomic_cas((int64_t*)&m_log_buffer.data, h.data, new_h.data); } while (!result); buffer = (LogBuffer*)FREELIST_POINTER(h); result_code = buffer->checkout_write(write_offset, bytes_needed); @@ -443,7 +443,7 @@ LogObject::_checkout_write(size_t * write_offset, size_t bytes_needed) { INK_QUEUE_LD64(old_h, m_log_buffer); head_p tmp_h; SET_FREELIST_POINTER_VERSION(tmp_h, new_buffer, 0); - result = ink_atomic_cas64((int64_t*)&m_log_buffer.data, old_h.data, tmp_h.data); + result = ink_atomic_cas((int64_t*)&m_log_buffer.data, old_h.data, tmp_h.data); } while (!result); if (FREELIST_POINTER(old_h) == FREELIST_POINTER(h)) ink_atomic_increment(&buffer->m_references, FREELIST_VERSION(old_h) - 1); @@ -483,7 +483,7 @@ LogObject::_checkout_write(size_t * write_offset, size_t bytes_needed) { break; head_p tmp_h; SET_FREELIST_POINTER_VERSION(tmp_h, FREELIST_POINTER(h), FREELIST_VERSION(old_h) - 1); - result = ink_atomic_cas64((int64_t*)&m_log_buffer.data, old_h.data, tmp_h.data); + result = ink_atomic_cas((int64_t*)&m_log_buffer.data, old_h.data, tmp_h.data); } while (!result); if (FREELIST_POINTER(old_h) != FREELIST_POINTER(h)) ink_atomic_increment(&buffer->m_references, -1);
