浏览代码

* added readbarriers as counterparts for the writebarriers (see
"SMP BARRIER PAIRING"
in https://www.kernel.org/doc/Documentation/memory-barriers.txt ), should
fix sporadic crashes of the test

git-svn-id: trunk@27726 -

Jonas Maebe 11 年之前
父节点
当前提交
20b8ade8ce
共有 1 个文件被更改,包括 8 次插入0 次删除
  1. 8 0
      tests/test/theapthread.pp

+ 8 - 0
tests/test/theapthread.pp

@@ -130,6 +130,10 @@ begin
   begin
     if ((pair.writeindex+1) mod fifolength) <> pair.readindex then
     begin
+      { counterpart for the writebarrier in the consumer: ensure that we see
+        the write to pair.fifo[pair.readindex] now that we've seen the write
+        to pair.readindex }
+      readbarrier;
       freemem(pair.fifo[pair.writeindex]);
       pair.fifo[pair.writeindex] := getmem(((pair.writeindex*17) mod 520)+8);
       writebarrier;
@@ -167,6 +171,10 @@ begin
   begin
     if pair.readindex <> pair.writeindex then
     begin
+      { counterpart for the writebarrier in the producer: ensure that we see
+        the write to pair.fifo[pair.writeindex] now that we've seen the write
+        to pair.writeindex }
+      readbarrier;
       freemem(pair.fifo[pair.readindex]);
       pair.fifo[pair.readindex] := getmem(((pair.writeindex*17) mod 520)+8);
       writebarrier;