You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@trafficserver.apache.org by James Peach <jp...@apache.org> on 2012/07/28 18:04:32 UTC
Re: git commit: TS-1385: generic atomic operations API
On 28/07/2012, at 8:54 AM, jpeach@apache.org wrote:
> Updated Branches:
> refs/heads/master b4d4f4a9a -> 76aa879db
>
>
> TS-1385: generic atomic operations API
This is supposed to be a no-impact change, but please review and keep an eye out for regressions since touching atomics is probably intrinsically risky ...
thanks!
James
>
>
> 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 <jp...@apache.org>
> Authored: Sat Jul 28 08:54:33 2012 -0700
> Committer: James Peach <jp...@apache.org>
> 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);
>