I believe the problem is with INK_QUEUE_LD which is not atomic:

diff --git a/lib/ts/ink_queue.h b/lib/ts/ink_queue.h
index 6ac9945..20fbf9a 100644
--- a/lib/ts/ink_queue.h
+++ b/lib/ts/ink_queue.h
@@ -72,7 +72,7 @@ extern "C"
 #endif

 #if TS_HAS_128BIT_CAS
-#define INK_QUEUE_LD(dst,src) *((__int128_t*)&(dst)) =
*((__int128_t*)&(src))
+#define INK_QUEUE_LD(dst,src) *(__int128_t*)&(dst) =
__sync_fetch_and_add((__int128_t*)&(src), 0)
 #else
 #define INK_QUEUE_LD(dst,src) INK_QUEUE_LD64(dst,src)
 #endif

This fixes the problem.

On Mon, Mar 18, 2013 at 9:31 PM, Brian Geffon <[email protected]> wrote:

> Hey, I'm looking into the failing freelist tests using the precise64
> vagrant box. If I can't figure it out tonight I'll just disable the check
> in configure.ac to get things stable again for the time being. If anyone
> else has some time to help out with this, I'd really appreciate it.
>
> Brian
>
> On Mon, Mar 18, 2013 at 9:49 AM, James Peach <[email protected]> wrote:
>
> > Hi Brian,
> >
> > I finally fixed the autoconf tests for TS_HAS_128BIT_CAS. Unfortunately
> > test_freelist fails on all the platforms that I have access to. I'm
> > assuming that on your platforms it succeeds, so maybe there's something
> > about the version of gcc you are using that makes it work.
> >
> > Since I don't really know which platforms this is working for, what do
> you
> > think about reverting this?
> >
> > J
>

Reply via email to