You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by jp...@apache.org on 2011/05/10 08:31:57 UTC
svn commit: r1101332 - in /trafficserver/traffic/trunk/lib/ts: ink_queue.cc
ink_queue.h ink_queue_utils.cc
Author: jplevyak
Date: Tue May 10 06:31:57 2011
New Revision: 1101332
URL: http://svn.apache.org/viewvc?rev=1101332&view=rev
Log:
Fix crash in atomics on i386. It seems that the compiler has gotten more
aggressive and requires the volatiles to be declared volatile :)
Modified:
trafficserver/traffic/trunk/lib/ts/ink_queue.cc
trafficserver/traffic/trunk/lib/ts/ink_queue.h
trafficserver/traffic/trunk/lib/ts/ink_queue_utils.cc
Modified: trafficserver/traffic/trunk/lib/ts/ink_queue.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/lib/ts/ink_queue.cc?rev=1101332&r1=1101331&r2=1101332&view=diff
==============================================================================
--- trafficserver/traffic/trunk/lib/ts/ink_queue.cc (original)
+++ trafficserver/traffic/trunk/lib/ts/ink_queue.cc Tue May 10 06:31:57 2011
@@ -612,7 +612,7 @@ ink_atomiclist_push(InkAtomicList * l, v
head_p head;
head_p item_pair;
int result = 0;
- void *h = NULL;
+ volatile void *h = NULL;
ink_assert(*adr_of_next == NULL);
do {
INK_QUEUE_LD64(head, l->head);
Modified: trafficserver/traffic/trunk/lib/ts/ink_queue.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/lib/ts/ink_queue.h?rev=1101332&r1=1101331&r2=1101332&view=diff
==============================================================================
--- trafficserver/traffic/trunk/lib/ts/ink_queue.h (original)
+++ trafficserver/traffic/trunk/lib/ts/ink_queue.h Tue May 10 06:31:57 2011
@@ -77,11 +77,11 @@ extern "C"
#if (defined(__i386__) || defined(__arm__)) && (SIZEOF_VOIDP == 4)
struct
{
- void *pointer;
- int32_t version;
+ volatile void *pointer;
+ volatile int32_t version;
} s;
#endif
- int64_t data;
+ volatile int64_t data;
} head_p;
/*
Modified: trafficserver/traffic/trunk/lib/ts/ink_queue_utils.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/lib/ts/ink_queue_utils.cc?rev=1101332&r1=1101331&r2=1101332&view=diff
==============================================================================
--- trafficserver/traffic/trunk/lib/ts/ink_queue_utils.cc (original)
+++ trafficserver/traffic/trunk/lib/ts/ink_queue_utils.cc Tue May 10 06:31:57 2011
@@ -70,8 +70,8 @@ void
ink_queue_load_64(void *dst, void *src)
{
#if (defined(__i386__) || defined(__arm__)) && (SIZEOF_VOIDP == 4)
- int32_t src_version = (*(head_p *) src).s.version;
- void *src_pointer = (*(head_p *) src).s.pointer;
+ volatile int32_t src_version = (*(head_p *) src).s.version;
+ volatile void *src_pointer = (*(head_p *) src).s.pointer;
(*(head_p *) dst).s.version = src_version;
(*(head_p *) dst).s.pointer = src_pointer;