https://github.com/python/cpython/commit/b88889e9ffd7b2d2bdac75aecbf14e37fd68e337
commit: b88889e9ffd7b2d2bdac75aecbf14e37fd68e337
branch: main
author: mpage <[email protected]>
committer: colesbury <[email protected]>
date: 2024-05-10T17:54:23-04:00
summary:

gh-117657: Log TSAN warnings to separate files and archive them (#118747)

This ensures we don't lose races that occur in subprocesses or
interleave races from workers running in parallel.

Log files are collected and packaged into a zipfile that can be
downloaded from the "Artifacts" section of the workflow run.

files:
M .github/workflows/build.yml
M .github/workflows/reusable-tsan.yml
M Tools/tsan/supressions.txt

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index a53f1ae1a46fc1..d14d17a5e088b6 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -486,6 +486,7 @@ jobs:
       config_hash: ${{ needs.check_source.outputs.config_hash }}
       options: ./configure --config-cache --with-thread-sanitizer 
--with-pydebug
       suppressions_path: Tools/tsan/supressions.txt
+      tsan_logs_artifact_name: tsan-logs-default
 
   build_tsan_free_threading:
     name: 'Thread sanitizer (free-threading)'
@@ -496,6 +497,7 @@ jobs:
       config_hash: ${{ needs.check_source.outputs.config_hash }}
       options: ./configure --config-cache --disable-gil 
--with-thread-sanitizer --with-pydebug
       suppressions_path: Tools/tsan/suppressions_free_threading.txt
+      tsan_logs_artifact_name: tsan-logs-free-threading
 
   # CIFuzz job based on 
https://google.github.io/oss-fuzz/getting-started/continuous-integration/
   cifuzz:
diff --git a/.github/workflows/reusable-tsan.yml 
b/.github/workflows/reusable-tsan.yml
index 48bd5b547e8cba..b6d5d8fa1c7157 100644
--- a/.github/workflows/reusable-tsan.yml
+++ b/.github/workflows/reusable-tsan.yml
@@ -11,6 +11,10 @@ on:
         description: 'A repo relative path to the suppressions file'
         required: true
         type: string
+      tsan_logs_artifact_name:
+        description: 'Name of the TSAN logs artifact. Must be unique for each 
job.'
+        required: true
+        type: string
 
 jobs:
   build_tsan_reusable:
@@ -41,7 +45,7 @@ jobs:
         sudo sysctl -w vm.mmap_rnd_bits=28
     - name: TSAN Option Setup
       run: |
-        echo "TSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/${{ 
inputs.suppressions_path }}" >> $GITHUB_ENV
+        echo "TSAN_OPTIONS=log_path=${GITHUB_WORKSPACE}/tsan_log 
suppressions=${GITHUB_WORKSPACE}/${{ inputs.suppressions_path }} handle_segv=0" 
>> $GITHUB_ENV
         echo "CC=clang" >> $GITHUB_ENV
         echo "CXX=clang++" >> $GITHUB_ENV
     - name: Add ccache to PATH
@@ -60,3 +64,13 @@ jobs:
       run: make pythoninfo
     - name: Tests
       run: ./python -m test --tsan -j4
+    - name: Display TSAN logs
+      if: always()
+      run: find ${GITHUB_WORKSPACE} -name 'tsan_log.*' | xargs head -n 1000
+    - name: Archive TSAN logs
+      if: always()
+      uses: actions/upload-artifact@v4
+      with:
+        name: ${{ inputs.tsan_logs_artifact_name }}
+        path: tsan_log.*
+        if-no-files-found: ignore
diff --git a/Tools/tsan/supressions.txt b/Tools/tsan/supressions.txt
index c778c791eacce8..22ba9d6ba2ab4d 100644
--- a/Tools/tsan/supressions.txt
+++ b/Tools/tsan/supressions.txt
@@ -2,3 +2,6 @@
 # reference: 
https://github.com/google/sanitizers/wiki/ThreadSanitizerSuppressions
 race:get_allocator_unlocked
 race:set_allocator_unlocked
+
+# https://gist.github.com/mpage/daaf32b39180c1989572957b943eb665
+thread:pthread_create

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to