Skip to content

Commit 0c94acd

Browse files
jpnurmiclaude
andcommitted
Merge upstream/master into http-retry branch
Replace retry_dump_queue with retry_seal, leveraging the new bgworker draining flag from upstream. Retry envelopes are already persisted to disk by retry_enqueue, so they don't need explicit dumping — only in-memory http_send_task envelopes are dumped by http_dump_queue. On shutdown timeout: flush cleanup tasks + seal retry to prevent a detached worker from writing duplicate envelopes. Disable http_retry in the crash daemon — it's a one-shot process that sends once and exits. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2 parents 878ace5 + d25d3ec commit 0c94acd

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1632
-321
lines changed

.github/workflows/benchmark.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ jobs:
3131
runs-on: ${{ matrix.os }}
3232

3333
steps:
34-
- uses: actions/checkout@v6
34+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
3535
with:
3636
submodules: recursive
3737

38-
- uses: actions/setup-python@v6
38+
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
3939
with:
4040
python-version: "3.12"
4141
cache: "pip"
@@ -52,7 +52,7 @@ jobs:
5252
pip install --upgrade --requirement tests/requirements.txt
5353
pytest --verbose --benchmark_out=benchmark.json tests/benchmark.py
5454
55-
- uses: benchmark-action/github-action-benchmark@v1
55+
- uses: benchmark-action/github-action-benchmark@a7bc2366eda11037936ea57d811a43b3418d3073 # v1
5656
if: ${{ github.event_name == 'push' }}
5757
with:
5858
name: ${{ runner.os }}

.github/workflows/ci.yml

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ jobs:
2121
name: Lint
2222
runs-on: ubuntu-latest
2323
steps:
24-
- uses: actions/checkout@v6
24+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
2525
- run: make style
2626

2727
build-ios-inproc:
2828
name: Xcode Build for inproc on iOS
2929
runs-on: macos-latest
3030
steps:
31-
- uses: actions/checkout@v6
31+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
3232
with:
3333
submodules: "recursive"
3434
- run: |
@@ -39,7 +39,7 @@ jobs:
3939
name: Xcode Build for breakpad on iOS
4040
runs-on: macos-latest
4141
steps:
42-
- uses: actions/checkout@v6
42+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
4343
with:
4444
submodules: "recursive"
4545
- run: |
@@ -191,12 +191,17 @@ jobs:
191191
MINGW_ASM_MASM_COMPILER: llvm-ml
192192
MINGW_ASM_MASM_FLAGS: -m64
193193
- name: Android (API 21, NDK 23)
194-
os: macos-15-large
194+
os: ubuntu-latest
195195
ANDROID_API: 21
196196
ANDROID_NDK: 23.2.8568313
197197
ANDROID_ARCH: x86_64
198+
- name: Android (API 26, NDK 27)
199+
os: ubuntu-latest
200+
ANDROID_API: 26
201+
ANDROID_NDK: 27.3.13750724
202+
ANDROID_ARCH: x86_64
198203
- name: Android (API 31, NDK 27)
199-
os: macos-15-large
204+
os: ubuntu-latest
200205
ANDROID_API: 31
201206
ANDROID_NDK: 27.3.13750724
202207
ANDROID_ARCH: x86_64
@@ -227,7 +232,7 @@ jobs:
227232
UTF8_TEST_CWD: ${{ matrix.UTF8_TEST_CWD }}
228233

229234
steps:
230-
- uses: actions/checkout@v6
235+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
231236
with:
232237
submodules: recursive
233238

@@ -236,18 +241,18 @@ jobs:
236241
run: |
237242
echo "Runner arch: $(uname -m)"
238243
239-
- uses: actions/setup-python@v6
244+
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
240245
with:
241246
python-version: ${{ !env['SYSTEM_PYTHON'] && '3.12' || '' }}
242247
cache: "pip"
243248

244249
- name: Check Linux CC/CXX
245-
if: ${{ runner.os == 'Linux' && !matrix.container }}
250+
if: ${{ runner.os == 'Linux' && !env['ANDROID_API'] &&!matrix.container }}
246251
run: |
247252
[ -n "$CC" ] && [ -n "$CXX" ] || { echo "Ubuntu runner configurations require toolchain selection via CC and CXX" >&2; exit 1; }
248253
249254
- name: Installing Linux Dependencies
250-
if: ${{ runner.os == 'Linux' && !env['TEST_X86'] && !matrix.container }}
255+
if: ${{ runner.os == 'Linux' && !env['TEST_X86'] && !env['ANDROID_API'] && !matrix.container }}
251256
run: |
252257
sudo apt update
253258
# Install common dependencies
@@ -278,7 +283,7 @@ jobs:
278283
sudo make install
279284
280285
- name: Installing Linux 32-bit Dependencies
281-
if: ${{ runner.os == 'Linux' && env['TEST_X86'] && !matrix.container }}
286+
if: ${{ runner.os == 'Linux' && env['TEST_X86'] && !env['ANDROID_API'] &&!matrix.container }}
282287
run: |
283288
sudo dpkg --add-architecture i386
284289
sudo apt update
@@ -346,17 +351,33 @@ jobs:
346351

347352
- name: Setup Java Version
348353
if: ${{ env['ANDROID_API'] }}
349-
uses: actions/setup-java@v5
354+
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
350355
with:
351356
distribution: "temurin"
352357
java-version: "17"
353358

354359
- name: Setup Gradle
355360
if: ${{ env['ANDROID_API'] }}
356-
uses: gradle/actions/setup-gradle@03ee1e1693f571d64506b3ed4cdf120520300ff2 # pin@v3
361+
uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # pin@v5.0.2
357362
with:
358363
gradle-home-cache-cleanup: true
359364

365+
- name: Setup .NET for Android
366+
if: ${{ env['ANDROID_API'] }}
367+
uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5
368+
with:
369+
dotnet-version: '10.0.x'
370+
371+
- name: Install .NET Android workload
372+
if: ${{ env['ANDROID_API'] }}
373+
run: dotnet workload restore tests/fixtures/dotnet_signal/test_dotnet.csproj
374+
375+
- name: Enable KVM group perms
376+
if: ${{ runner.os == 'Linux' && env['ANDROID_API'] }}
377+
run: |
378+
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
379+
sudo udevadm control --reload-rules
380+
sudo udevadm trigger --name-match=kvm
360381
361382
- name: Add sentry.native.test hostname
362383
if: ${{ runner.os == 'Windows' }}
@@ -408,7 +429,7 @@ jobs:
408429

409430
- name: "Upload to codecov.io"
410431
if: ${{ contains(env['RUN_ANALYZER'], 'cov') }}
411-
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # pin@v5.5.2
432+
uses: codecov/codecov-action@1af58845a975a7985b0beb0cbe6fbbb71a41dbad # pin@v5.5.3
412433
with:
413434
directory: coverage
414435
token: ${{ secrets.CODECOV_TOKEN }}
@@ -423,18 +444,18 @@ jobs:
423444
# run on master or the release branch
424445
if: ${{ needs.test.result == 'success' && github.event_name == 'push' }}
425446
steps:
426-
- uses: actions/checkout@v6
447+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
427448
with:
428449
submodules: recursive
429450

430451
- name: Setup Java Version
431-
uses: actions/setup-java@v5
452+
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
432453
with:
433454
distribution: "temurin"
434455
java-version: "17"
435456

436457
- name: Setup Gradle
437-
uses: gradle/actions/setup-gradle@03ee1e1693f571d64506b3ed4cdf120520300ff2 # pin@v3
458+
uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # pin@v5.0.2
438459
with:
439460
gradle-home-cache-cleanup: true
440461

@@ -448,7 +469,7 @@ jobs:
448469
run: ./gradlew clean distZip
449470

450471
- name: Upload artifacts
451-
uses: actions/upload-artifact@v7
472+
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7
452473
with:
453474
name: ${{ github.sha }}
454475
if-no-files-found: error

.github/workflows/codeql.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@ jobs:
2525

2626
steps:
2727
- name: Checkout Repo
28-
uses: actions/checkout@v6
28+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
2929
with:
3030
submodules: 'recursive'
3131

3232
- name: Initialize CodeQL
33-
uses: github/codeql-action/init@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # pin@v2
33+
uses: github/codeql-action/init@38697555549f1db7851b81482ff19f1fa5c4fedc # v4
3434
with:
3535
languages: ${{ matrix.language }}
3636

@@ -41,14 +41,14 @@ jobs:
4141
4242
- if: matrix.language == 'java'
4343
name: Setup Java Version
44-
uses: actions/setup-java@v5
44+
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
4545
with:
4646
distribution: 'temurin'
4747
java-version: '17'
4848

4949
- if: matrix.language == 'java'
5050
name: Setup Gradle
51-
uses: gradle/actions/setup-gradle@03ee1e1693f571d64506b3ed4cdf120520300ff2 # pin@v3
51+
uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # pin@v5.0.2
5252
with:
5353
gradle-home-cache-cleanup: true
5454

@@ -64,4 +64,4 @@ jobs:
6464
cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo && cmake --build build --parallel
6565
6666
- name: Perform CodeQL Analysis
67-
uses: github/codeql-action/analyze@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # pin@v2
67+
uses: github/codeql-action/analyze@38697555549f1db7851b81482ff19f1fa5c4fedc # v4

.github/workflows/danger.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ jobs:
88
danger:
99
runs-on: ubuntu-latest
1010
steps:
11-
- uses: getsentry/github-workflows/danger@v3
11+
- uses: getsentry/github-workflows/danger@26f565c05d0dd49f703d238706b775883037d76b # v3

.github/workflows/docker.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ jobs:
2626
IMAGE_NAME: ghcr.io/${{ github.repository_owner }}/sentry-native-alpine:${{ matrix.version }}
2727

2828
steps:
29-
- uses: actions/checkout@v6
29+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
3030

31-
- uses: docker/login-action@v4
31+
- uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4
3232
with:
3333
registry: ghcr.io
3434
username: ${{ github.actor }}

.github/workflows/e2e-test.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222
runs-on: ${{ matrix.os }}
2323

2424
steps:
25-
- uses: actions/checkout@v6
25+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
2626
with:
2727
submodules: recursive
2828

@@ -33,7 +33,7 @@ jobs:
3333
sudo apt install -y cmake libcurl4-openssl-dev
3434
3535
- name: Set up Python
36-
uses: actions/setup-python@v6
36+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
3737
with:
3838
python-version: "3.12"
3939

.github/workflows/enforce-license-compliance.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ jobs:
1111
runs-on: ubuntu-latest
1212
steps:
1313
- name: 'Enforce License Compliance'
14-
uses: getsentry/action-enforce-license-compliance@main
14+
uses: getsentry/action-enforce-license-compliance@48236a773346cb6552a7bda1ee370d2797365d87 # main
1515
with:
1616
fossa_api_key: ${{ secrets.FOSSA_API_KEY }}

.github/workflows/release.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ jobs:
2222
app-id: ${{ vars.SENTRY_RELEASE_BOT_CLIENT_ID }}
2323
private-key: ${{ secrets.SENTRY_RELEASE_BOT_PRIVATE_KEY }}
2424

25-
- uses: actions/checkout@v6
25+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
2626
with:
2727
token: ${{ steps.token.outputs.token }}
2828
fetch-depth: 0
2929

3030
- name: Prepare release
31-
uses: getsentry/action-prepare-release@v1
31+
uses: getsentry/action-prepare-release@c8e1c2009ab08259029170132c384f03c1064c0e # v1
3232
env:
3333
GITHUB_TOKEN: ${{ steps.token.outputs.token }}
3434
with:

.github/workflows/validate-pr.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
name: Validate PR
2+
3+
on:
4+
pull_request_target:
5+
types: [opened, reopened]
6+
7+
jobs:
8+
validate-pr:
9+
runs-on: ubuntu-24.04
10+
permissions:
11+
pull-requests: write
12+
steps:
13+
- uses: getsentry/github-workflows/validate-pr@0b52fc6a867b744dcbdf5d25c18bc8d1c95710e1
14+
with:
15+
app-id: ${{ vars.SDK_MAINTAINER_BOT_APP_ID }}
16+
private-key: ${{ secrets.SDK_MAINTAINER_BOT_PRIVATE_KEY }}

CHANGELOG.md

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,34 @@
66

77
- Add HTTP retry with exponential backoff. ([#1520](https://github.com/getsentry/sentry-native/pull/1520))
88

9+
## 0.13.4
10+
11+
**Features**:
12+
13+
- Symbolicate stack frames in crash daemon on Windows. ([#1595](https://github.com/getsentry/sentry-native/pull/1595))
14+
- Add offline caching support to the new experimental `native` backend. ([#1585](https://github.com/getsentry/sentry-native/pull/1585))
15+
16+
**Fixes**:
17+
18+
- Fix `cache_keep` to only cache envelopes when HTTP send fails, instead of unconditionally on restart. ([#1585](https://github.com/getsentry/sentry-native/pull/1585))
19+
- Fix external crash reporter to work with the new experimental `native` backend. ([#1589](https://github.com/getsentry/sentry-native/pull/1589))
20+
- Fix crash daemon premature exit on Windows ([#1600](https://github.com/getsentry/sentry-native/pull/1600))
21+
- native: Fix incorrect stacktraces on Linux by merging ELF segment mappings from `/proc/pid/maps`. Without merging, `base_of_image` pointed to the code segment instead of the real ELF load base, breaking server-side CFI unwinding. ([#1588](https://github.com/getsentry/sentry-native/pull/1588))
22+
- native: Fix single-frame stacktraces on x86_64 and `-fomit-frame-pointer` builds by capturing DWARF-based backtraces (via libunwind) in the signal handler. The daemon now prefers these over FP-based walking, which fails when RBP is used as a general-purpose register. ([#1588](https://github.com/getsentry/sentry-native/pull/1588))
23+
- native: Fix missing thread names on Windows ([#1601](https://github.com/getsentry/sentry-native/pull/1601))
24+
25+
## 0.13.3
26+
27+
**Features**:
28+
29+
- Add `addAttachment` and `clearAttachments` to the NDK `NativeScope` API for managing file and byte attachments via JNI. ([#1584](https://github.com/getsentry/sentry-native/pull/1584))
30+
931
**Fixes**:
1032

1133
- inproc: only the handling thread cleans up after the crash. ([#1579](https://github.com/getsentry/sentry-native/pull/1579))
1234
- Propagate transport options (`ca_certs`, `proxy`, `user_agent`) and `handler_path` to the native backend crash daemon. Previously, the daemon did not receive SSL certificate or proxy settings from the parent process, causing SSL errors (curl code 60) when uploading crash reports. The daemon also ignored the user-configured handler path, requiring the `sentry-crash` binary to be placed next to the application executable. ([#1573](https://github.com/getsentry/sentry-native/pull/1573))
1335
- Add module header pages to MemoryList and fix exception code in the native backend. ([#1576](https://github.com/getsentry/sentry-native/pull/1576))
36+
- Fix `CHAIN_AT_START` handler strategy crashing on Android when the chained Mono handler resets the signal handler and re-raises. ([#1572](https://github.com/getsentry/sentry-native/pull/1572))
1437

1538
## 0.13.2
1639

@@ -122,7 +145,6 @@
122145
- Add logs flush on `sentry_flush()`. ([#1434](https://github.com/getsentry/sentry-native/pull/1434))
123146
- Add global attributes API. These are added to all `sentry_log_X` calls. ([#1450](https://github.com/getsentry/sentry-native/pull/1450))
124147

125-
126148
## 0.12.1
127149

128150
**Fixes**:

0 commit comments

Comments
 (0)