[PATCH] D18502: [tsan] Fix synchronization in dispatch_sync

Kuba Brecka via llvm-commits llvm-commits at lists.llvm.org
Sun Mar 27 14:07:15 PDT 2016


kubabrecka created this revision.
kubabrecka added reviewers: dvyukov, glider, samsonov, kcc.
kubabrecka added subscribers: llvm-commits, zaks.anna, dcoughlin.

In the interceptor for dispatch_sync, we're currently missing synchronization between the callback and the code *after* the call to dispatch_sync.  So we'll false report a race in:

    // now executing on a background queue/thread
    dispatch_sync(main_queue, ^{ // "main_queue" forces the callback to be executed on a different thread
      x = 42;
    });
    print(x); // back on the background_thread

This patch fixes this by adding an extra release+acquire pair to dispatch_sync() and similar APIs.  Added a testcase.

http://reviews.llvm.org/D18502

Files:
  lib/tsan/rtl/tsan_libdispatch_mac.cc
  test/tsan/Darwin/gcd-blocks.mm

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D18502.51748.patch
Type: text/x-patch
Size: 9269 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160327/72de0b5c/attachment.bin>


More information about the llvm-commits mailing list