From febf9485db788b2be7f99e7c7d674188cdb89b3e Mon Sep 17 00:00:00 2001 From: Brian Norris Date: Tue, 5 Mar 2013 19:08:32 -0800 Subject: [PATCH] ms-queue: fixups, add simple race detection --- ms-queue/main.c | 1 - ms-queue/my_queue.c | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ms-queue/main.c b/ms-queue/main.c index 51e0e79..210c57a 100644 --- a/ms-queue/main.c +++ b/ms-queue/main.c @@ -63,7 +63,6 @@ int user_main(int argc, char **argv) int *param; parse_args(argc, argv); - iterations = (iterations + (procs >> 1)) / procs; queue = calloc(1, sizeof(*queue)); assert(queue); diff --git a/ms-queue/my_queue.c b/ms-queue/my_queue.c index 498fb42..67ec680 100644 --- a/ms-queue/my_queue.c +++ b/ms-queue/my_queue.c @@ -1,5 +1,6 @@ #include #include +#include "librace.h" #include "my_queue.h" @@ -54,7 +55,7 @@ void enqueue(queue_t *q, unsigned int val) pointer tmp; node = new_node(); - q->nodes[node].value = val; + store_32(&q->nodes[node].value, val); tmp = atomic_load(&q->nodes[node].next); set_ptr(&tmp, 0); // NULL atomic_store(&q->nodes[node].next, tmp); @@ -105,7 +106,7 @@ unsigned int dequeue(queue_t *q) MAKE_POINTER(get_ptr(next), get_count(tail) + 1)); thrd_yield(); } else { - value = q->nodes[get_ptr(next)].value; + value = load_32(&q->nodes[get_ptr(next)].value); success = atomic_compare_exchange_weak(&q->head, &head, MAKE_POINTER(get_ptr(next), get_count(head) + 1)); -- 2.34.1