Skip to content

fix(crashtracking): guard sigchld and sigpipe during crashtracker signal handler execution#1771

Merged
gh-worker-dd-mergequeue-cf854d[bot] merged 2 commits intomainfrom
gyuheon0h/PROF-14080-saguard-ct
Mar 24, 2026
Merged

fix(crashtracking): guard sigchld and sigpipe during crashtracker signal handler execution#1771
gh-worker-dd-mergequeue-cf854d[bot] merged 2 commits intomainfrom
gyuheon0h/PROF-14080-saguard-ct

Conversation

@gyuheon0h
Copy link
Copy Markdown
Collaborator

@gyuheon0h gyuheon0h commented Mar 20, 2026

What does this PR do?

Guards SIGCHLD and SIGPIPE during crashtracker signal handler execution

Motivation

During execution of the signal handler, it cannot be guaranteed that the signal is handled without SA_NODEFER, thus it also cannot be guaranteed that signals like SIGCHLD and SIGPIPE will not be emitted during this handler as a result of the handler itself. Thus, we need to prevent the emission of signals we might create (and cannot be created during a signal handler except by our own execution) and defer any other signals. To put it another way, it is conceivable that the crash handling code will emit SIGCHLD or SIGPIPE, and instead of risking responding to those signals, it needs to suppress them.

Additional Notes

This was originally implemented in: Crashtracker receiver is spawned on crash
but subsequently removed.

How to test the change?

Unit tests for saguard.rs. Integration test will be in a following PR

Copy link
Copy Markdown
Collaborator Author

gyuheon0h commented Mar 20, 2026

@gyuheon0h gyuheon0h changed the title Guard sigchld and sigpipe; add unit tests fix(crashtracking): guard sigchld and sigpipe during crashtracker signal handler execution Mar 20, 2026
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 20, 2026

Clippy Allow Annotation Report

Comparing clippy allow annotations between branches:

  • Base Branch: origin/main
  • PR Branch: origin/gyuheon0h/PROF-14080-saguard-ct

Summary by Rule

Rule Base Branch PR Branch Change

Annotation Counts by File

File Base Branch PR Branch Change

Annotation Stats by Crate

Crate Base Branch PR Branch Change
clippy-annotation-reporter 5 5 No change (0%)
datadog-ffe-ffi 1 1 No change (0%)
datadog-ipc 20 20 No change (0%)
datadog-live-debugger 6 6 No change (0%)
datadog-live-debugger-ffi 10 10 No change (0%)
datadog-profiling-replayer 4 4 No change (0%)
datadog-remote-config 3 3 No change (0%)
datadog-sidecar 55 55 No change (0%)
libdd-common 10 10 No change (0%)
libdd-common-ffi 12 12 No change (0%)
libdd-data-pipeline 5 5 No change (0%)
libdd-ddsketch 2 2 No change (0%)
libdd-dogstatsd-client 1 1 No change (0%)
libdd-profiling 13 13 No change (0%)
libdd-telemetry 19 19 No change (0%)
libdd-tinybytes 4 4 No change (0%)
libdd-trace-normalization 2 2 No change (0%)
libdd-trace-obfuscation 8 8 No change (0%)
libdd-trace-utils 15 15 No change (0%)
Total 195 195 No change (0%)

About This Report

This report tracks Clippy allow annotations for specific rules, showing how they've changed in this PR. Decreasing the number of these annotations generally improves code quality.

@gyuheon0h gyuheon0h marked this pull request as ready for review March 20, 2026 17:17
@gyuheon0h gyuheon0h requested a review from a team as a code owner March 20, 2026 17:17
@gyuheon0h gyuheon0h requested a review from danielsn March 20, 2026 17:17
let _ = fs::remove_file(&detector_log_path);

let config = CrashTestConfig::new(
BuildProfile::Debug,
Copy link
Copy Markdown
Collaborator Author

@gyuheon0h gyuheon0h Mar 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reason I do this

SIGCHLD -> SIG_IGN -> kernel auto-reaps collector child -> waitpid returns ECHILD -> reap_child_non_blocking returns unexpected result -> debug_assert_eq! at process_handle.rs:33 fails -> format! allocates to build the panic message -> preload detector catches malloc.

We should be running this test in release mode anyways

@gyuheon0h gyuheon0h force-pushed the gyuheon0h/PROF-14080-saguard-ct branch from afaa9e2 to 007d923 Compare March 20, 2026 17:29
@datadog-datadog-prod-us1-2
Copy link
Copy Markdown

datadog-datadog-prod-us1-2 bot commented Mar 20, 2026

✅ Tests

🎉 All green!

❄️ No new flaky tests detected
🧪 All tests passed

🎯 Code Coverage (details)
Patch Coverage: 88.89%
Overall Coverage: 70.49% (+0.03%)

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 7e7908c | Docs | Datadog PR Page | Was this helpful? React with 👍/👎 or give us feedback!

@gyuheon0h gyuheon0h force-pushed the gyuheon0h/PROF-14080-saguard-ct branch from 007d923 to 7b3be99 Compare March 20, 2026 17:42
@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Mar 20, 2026

Codecov Report

❌ Patch coverage is 88.88889% with 4 lines in your changes missing coverage. Please review.
✅ Project coverage is 70.49%. Comparing base (d1eb663) to head (7e7908c).

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1771      +/-   ##
==========================================
+ Coverage   70.46%   70.49%   +0.02%     
==========================================
  Files         410      411       +1     
  Lines       62138    62220      +82     
==========================================
+ Hits        43786    43861      +75     
- Misses      18352    18359       +7     
Components Coverage Δ
libdd-crashtracker 65.26% <88.88%> (+0.32%) ⬆️
libdd-crashtracker-ffi 34.98% <ø> (ø)
libdd-alloc 98.77% <ø> (ø)
libdd-data-pipeline 87.61% <ø> (ø)
libdd-data-pipeline-ffi 73.45% <ø> (ø)
libdd-common 79.78% <ø> (ø)
libdd-common-ffi 73.87% <ø> (ø)
libdd-telemetry 62.48% <ø> (ø)
libdd-telemetry-ffi 16.75% <ø> (ø)
libdd-dogstatsd-client 82.64% <ø> (ø)
datadog-ipc 72.56% <ø> (ø)
libdd-profiling 81.60% <ø> (ø)
libdd-profiling-ffi 64.94% <ø> (ø)
datadog-sidecar 31.63% <ø> (ø)
datdog-sidecar-ffi 13.34% <ø> (ø)
spawn-worker 54.69% <ø> (ø)
libdd-tinybytes 93.16% <ø> (ø)
libdd-trace-normalization 81.71% <ø> (ø)
libdd-trace-obfuscation 92.26% <ø> (ø)
libdd-trace-protobuf 68.25% <ø> (ø)
libdd-trace-utils 88.95% <ø> (ø)
datadog-tracer-flare 86.88% <ø> (ø)
libdd-log 74.69% <ø> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@pr-commenter
Copy link
Copy Markdown

pr-commenter bot commented Mar 20, 2026

Benchmarks

Comparison

Benchmark execution time: 2026-03-24 18:05:11

Comparing candidate commit 7e7908c in PR branch gyuheon0h/PROF-14080-saguard-ct with baseline commit d1eb663 in branch main.

Found 0 performance improvements and 1 performance regressions! Performance is the same for 60 metrics, 0 unstable metrics.

Explanation

This is an A/B test comparing a candidate commit's performance against that of a baseline commit. Performance changes are noted in the tables below as:

  • 🟩 = significantly better candidate vs. baseline
  • 🟥 = significantly worse candidate vs. baseline

We compute a confidence interval (CI) over the relative difference of means between metrics from the candidate and baseline commits, considering the baseline as the reference.

If the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD), the change is considered significant.

Feel free to reach out to #apm-benchmarking-platform on Slack if you have any questions.

More details about the CI and significant changes

You can imagine this CI as a range of values that is likely to contain the true difference of means between the candidate and baseline commits.

CIs of the difference of means are often centered around 0%, because often changes are not that big:

---------------------------------(------|---^--------)-------------------------------->
                              -0.6%    0%  0.3%     +1.2%
                                 |          |        |
         lower bound of the CI --'          |        |
sample mean (center of the CI) -------------'        |
         upper bound of the CI ----------------------'

As described above, a change is considered significant if the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD).

For instance, for an execution time metric, this confidence interval indicates a significantly worse performance:

----------------------------------------|---------|---(---------^---------)---------->
                                       0%        1%  1.3%      2.2%      3.1%
                                                  |   |         |         |
       significant impact threshold --------------'   |         |         |
                      lower bound of CI --------------'         |         |
       sample mean (center of the CI) --------------------------'         |
                      upper bound of CI ----------------------------------'

scenario:receiver_entry_point/report/2598

  • 🟥 execution_time [+173.326µs; +182.085µs] or [+5.014%; +5.268%]

Candidate

Candidate benchmark details

Group 1

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
redis/obfuscate_redis_string execution_time 33.215µs 33.848µs ± 1.147µs 33.333µs ± 0.035µs 33.372µs 36.282µs 36.363µs 37.812µs 13.44% 1.750 1.205 3.38% 0.081µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
redis/obfuscate_redis_string execution_time [33.689µs; 34.007µs] or [-0.470%; +0.470%] None None None

Group 2

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
sql/obfuscate_sql_string execution_time 89.188µs 89.379µs ± 0.256µs 89.355µs ± 0.051µs 89.407µs 89.535µs 89.585µs 92.788µs 3.84% 11.861 155.128 0.29% 0.018µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
sql/obfuscate_sql_string execution_time [89.343µs; 89.414µs] or [-0.040%; +0.040%] None None None

Group 3

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... execution_time 495.198µs 496.297µs ± 0.816µs 496.229µs ± 0.304µs 496.516µs 496.878µs 497.690µs 505.909µs 1.95% 8.328 94.846 0.16% 0.058µs 1 200
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... throughput 1976638.982op/s 2014928.555op/s ± 3267.025op/s 2015199.418op/s ± 1235.084op/s 2016439.697op/s 2017722.023op/s 2018343.574op/s 2019395.395op/s 0.21% -8.194 92.708 0.16% 231.014op/s 1 200
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて execution_time 370.680µs 371.518µs ± 0.312µs 371.508µs ± 0.186µs 371.695µs 372.049µs 372.285µs 372.406µs 0.24% 0.247 0.196 0.08% 0.022µs 1 200
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて throughput 2685239.809op/s 2691662.249op/s ± 2261.945op/s 2691733.966op/s ± 1344.144op/s 2692999.913op/s 2695381.259op/s 2696379.579op/s 2697745.635op/s 0.22% -0.241 0.193 0.08% 159.944op/s 1 200
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters execution_time 167.843µs 168.203µs ± 0.171µs 168.179µs ± 0.105µs 168.299µs 168.502µs 168.725µs 168.826µs 0.38% 0.830 1.179 0.10% 0.012µs 1 200
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters throughput 5923267.241op/s 5945192.954op/s ± 6033.373op/s 5946029.550op/s ± 3704.913op/s 5949193.473op/s 5953783.973op/s 5955665.666op/s 5957947.972op/s 0.20% -0.823 1.160 0.10% 426.624op/s 1 200
normalization/normalize_service/normalize_service/[empty string] execution_time 36.821µs 37.005µs ± 0.112µs 36.997µs ± 0.094µs 37.102µs 37.194µs 37.235µs 37.266µs 0.73% 0.223 -0.991 0.30% 0.008µs 1 200
normalization/normalize_service/normalize_service/[empty string] throughput 26834077.028op/s 27023829.352op/s ± 81785.849op/s 27029201.087op/s ± 68658.027op/s 27092679.314op/s 27140230.648op/s 27156351.118op/s 27158600.535op/s 0.48% -0.214 -0.998 0.30% 5783.133op/s 1 200
normalization/normalize_service/normalize_service/test_ASCII execution_time 46.256µs 46.378µs ± 0.102µs 46.368µs ± 0.036µs 46.404µs 46.484µs 46.534µs 47.573µs 2.60% 8.148 92.438 0.22% 0.007µs 1 200
normalization/normalize_service/normalize_service/test_ASCII throughput 21020488.670op/s 21562132.897op/s ± 46593.351op/s 21566486.543op/s ± 16800.652op/s 21583818.248op/s 21604718.298op/s 21609571.502op/s 21618905.300op/s 0.24% -7.965 89.560 0.22% 3294.647op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... execution_time [496.184µs; 496.410µs] or [-0.023%; +0.023%] None None None
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... throughput [2014475.777op/s; 2015381.333op/s] or [-0.022%; +0.022%] None None None
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて execution_time [371.475µs; 371.561µs] or [-0.012%; +0.012%] None None None
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて throughput [2691348.765op/s; 2691975.733op/s] or [-0.012%; +0.012%] None None None
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters execution_time [168.180µs; 168.227µs] or [-0.014%; +0.014%] None None None
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters throughput [5944356.786op/s; 5946029.121op/s] or [-0.014%; +0.014%] None None None
normalization/normalize_service/normalize_service/[empty string] execution_time [36.989µs; 37.020µs] or [-0.042%; +0.042%] None None None
normalization/normalize_service/normalize_service/[empty string] throughput [27012494.620op/s; 27035164.084op/s] or [-0.042%; +0.042%] None None None
normalization/normalize_service/normalize_service/test_ASCII execution_time [46.364µs; 46.392µs] or [-0.030%; +0.030%] None None None
normalization/normalize_service/normalize_service/test_ASCII throughput [21555675.507op/s; 21568590.287op/s] or [-0.030%; +0.030%] None None None

Group 4

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
write only interface execution_time 5.446µs 5.499µs ± 0.030µs 5.496µs ± 0.022µs 5.520µs 5.547µs 5.595µs 5.613µs 2.12% 0.723 1.069 0.54% 0.002µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
write only interface execution_time [5.495µs; 5.503µs] or [-0.075%; +0.075%] None None None

Group 5

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
benching deserializing traces from msgpack to their internal representation execution_time 49.913ms 50.297ms ± 1.051ms 50.140ms ± 0.093ms 50.253ms 50.466ms 58.512ms 58.871ms 17.41% 7.654 58.188 2.09% 0.074ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
benching deserializing traces from msgpack to their internal representation execution_time [50.151ms; 50.443ms] or [-0.290%; +0.290%] None None None

Group 6

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
two way interface execution_time 13.758µs 13.916µs ± 0.167µs 13.884µs ± 0.070µs 13.964µs 14.110µs 14.284µs 15.703µs 13.10% 6.372 63.688 1.20% 0.012µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
two way interface execution_time [13.892µs; 13.939µs] or [-0.166%; +0.166%] None None None

Group 7

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
benching serializing traces from their internal representation to msgpack execution_time 14.138ms 14.184ms ± 0.035ms 14.176ms ± 0.011ms 14.188ms 14.267ms 14.335ms 14.389ms 1.50% 2.953 10.936 0.25% 0.002ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
benching serializing traces from their internal representation to msgpack execution_time [14.179ms; 14.189ms] or [-0.034%; +0.034%] None None None

Group 8

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
profile_add_sample_timestamped_x1000 execution_time 4.199ms 4.203ms ± 0.008ms 4.202ms ± 0.001ms 4.204ms 4.207ms 4.209ms 4.314ms 2.66% 12.109 158.436 0.20% 0.001ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
profile_add_sample_timestamped_x1000 execution_time [4.202ms; 4.204ms] or [-0.027%; +0.027%] None None None

Group 9

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
sdk_test_data/rules-based execution_time 144.384µs 146.306µs ± 1.648µs 146.065µs ± 0.494µs 146.571µs 148.095µs 152.431µs 162.288µs 11.11% 5.741 46.769 1.12% 0.117µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
sdk_test_data/rules-based execution_time [146.078µs; 146.534µs] or [-0.156%; +0.156%] None None None

Group 10

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
ip_address/quantize_peer_ip_address_benchmark execution_time 5.007µs 5.069µs ± 0.035µs 5.078µs ± 0.027µs 5.095µs 5.119µs 5.122µs 5.125µs 0.93% -0.215 -1.343 0.69% 0.002µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
ip_address/quantize_peer_ip_address_benchmark execution_time [5.064µs; 5.074µs] or [-0.096%; +0.096%] None None None

Group 11

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
profile_add_sample2_frames_x1000 execution_time 731.038µs 732.776µs ± 0.675µs 732.729µs ± 0.472µs 733.240µs 733.943µs 734.285µs 735.007µs 0.31% 0.321 -0.014 0.09% 0.048µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
profile_add_sample2_frames_x1000 execution_time [732.683µs; 732.870µs] or [-0.013%; +0.013%] None None None

Group 12

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
profile_add_sample_frames_x1000 execution_time 4.148ms 4.153ms ± 0.003ms 4.153ms ± 0.001ms 4.154ms 4.156ms 4.157ms 4.181ms 0.67% 5.259 52.340 0.07% 0.000ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
profile_add_sample_frames_x1000 execution_time [4.153ms; 4.153ms] or [-0.009%; +0.009%] None None None

Group 13

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
tags/replace_trace_tags execution_time 2.392µs 2.435µs ± 0.015µs 2.436µs ± 0.010µs 2.443µs 2.464µs 2.478µs 2.484µs 1.97% 0.470 0.452 0.63% 0.001µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
tags/replace_trace_tags execution_time [2.433µs; 2.438µs] or [-0.088%; +0.088%] None None None

Group 14

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
credit_card/is_card_number/ execution_time 3.891µs 3.912µs ± 0.003µs 3.912µs ± 0.002µs 3.913µs 3.916µs 3.917µs 3.917µs 0.14% -2.115 15.392 0.07% 0.000µs 1 200
credit_card/is_card_number/ throughput 255270390.521op/s 255645460.798op/s ± 173905.142op/s 255618549.175op/s ± 102864.557op/s 255760018.315op/s 255888762.694op/s 255908356.973op/s 256977677.300op/s 0.53% 2.142 15.636 0.07% 12296.951op/s 1 200
credit_card/is_card_number/ 3782-8224-6310-005 execution_time 80.173µs 80.824µs ± 0.314µs 80.776µs ± 0.209µs 81.011µs 81.333µs 81.702µs 82.183µs 1.74% 1.040 2.349 0.39% 0.022µs 1 200
credit_card/is_card_number/ 3782-8224-6310-005 throughput 12167995.268op/s 12372696.823op/s ± 47805.953op/s 12379869.719op/s ± 32140.764op/s 12407321.563op/s 12437109.225op/s 12446932.363op/s 12472968.111op/s 0.75% -1.002 2.192 0.39% 3380.391op/s 1 200
credit_card/is_card_number/ 378282246310005 execution_time 72.958µs 73.614µs ± 0.340µs 73.576µs ± 0.269µs 73.875µs 74.183µs 74.406µs 74.716µs 1.55% 0.411 -0.349 0.46% 0.024µs 1 200
credit_card/is_card_number/ 378282246310005 throughput 13384065.502op/s 13584661.293op/s ± 62609.114op/s 13591458.458op/s ± 49782.428op/s 13633098.120op/s 13670875.228op/s 13700277.442op/s 13706531.273op/s 0.85% -0.390 -0.380 0.46% 4427.133op/s 1 200
credit_card/is_card_number/37828224631 execution_time 3.894µs 3.915µs ± 0.002µs 3.915µs ± 0.001µs 3.916µs 3.918µs 3.920µs 3.920µs 0.13% -4.441 45.663 0.05% 0.000µs 1 200
credit_card/is_card_number/37828224631 throughput 255109679.197op/s 255430751.303op/s ± 140357.894op/s 255442660.151op/s ± 57490.250op/s 255496798.456op/s 255554419.325op/s 255610337.254op/s 256817907.563op/s 0.54% 4.487 46.209 0.05% 9924.802op/s 1 200
credit_card/is_card_number/378282246310005 execution_time 69.986µs 70.598µs ± 0.286µs 70.591µs ± 0.211µs 70.802µs 71.109µs 71.248µs 71.380µs 1.12% 0.272 -0.445 0.40% 0.020µs 1 200
credit_card/is_card_number/378282246310005 throughput 14009455.988op/s 14164961.665op/s ± 57278.321op/s 14166031.992op/s ± 42252.380op/s 14209922.092op/s 14253869.244op/s 14270288.459op/s 14288592.129op/s 0.87% -0.254 -0.460 0.40% 4050.189op/s 1 200
credit_card/is_card_number/37828224631000521389798 execution_time 52.641µs 52.847µs ± 0.082µs 52.842µs ± 0.054µs 52.904µs 52.972µs 53.102µs 53.113µs 0.51% 0.466 0.752 0.15% 0.006µs 1 200
credit_card/is_card_number/37828224631000521389798 throughput 18827656.612op/s 18922517.889op/s ± 29247.448op/s 18924208.795op/s ± 19204.290op/s 18942515.055op/s 18966602.659op/s 18983277.384op/s 18996742.812op/s 0.38% -0.454 0.732 0.15% 2068.107op/s 1 200
credit_card/is_card_number/x371413321323331 execution_time 6.438µs 6.444µs ± 0.004µs 6.444µs ± 0.002µs 6.446µs 6.452µs 6.457µs 6.461µs 0.27% 1.228 1.885 0.06% 0.000µs 1 200
credit_card/is_card_number/x371413321323331 throughput 154779566.109op/s 155173136.573op/s ± 94846.657op/s 155193243.803op/s ± 50402.559op/s 155240075.562op/s 155289240.726op/s 155317649.496op/s 155339417.627op/s 0.09% -1.223 1.868 0.06% 6706.671op/s 1 200
credit_card/is_card_number_no_luhn/ execution_time 3.896µs 3.913µs ± 0.003µs 3.913µs ± 0.002µs 3.915µs 3.919µs 3.921µs 3.923µs 0.26% -0.179 5.171 0.08% 0.000µs 1 200
credit_card/is_card_number_no_luhn/ throughput 254888892.566op/s 255537957.742op/s ± 195125.509op/s 255551052.072op/s ± 104957.569op/s 255657848.421op/s 255785221.241op/s 255886965.603op/s 256653184.261op/s 0.43% 0.195 5.241 0.08% 13797.457op/s 1 200
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 execution_time 64.964µs 65.160µs ± 0.132µs 65.137µs ± 0.074µs 65.215µs 65.443µs 65.570µs 65.777µs 0.98% 1.619 3.930 0.20% 0.009µs 1 200
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 throughput 15202882.467op/s 15346833.592op/s ± 31068.363op/s 15352222.356op/s ± 17394.606op/s 15368239.229op/s 15384011.705op/s 15391917.058op/s 15393030.036op/s 0.27% -1.599 3.834 0.20% 2196.865op/s 1 200
credit_card/is_card_number_no_luhn/ 378282246310005 execution_time 58.194µs 58.379µs ± 0.114µs 58.367µs ± 0.080µs 58.452µs 58.604µs 58.701µs 58.809µs 0.76% 0.869 0.750 0.19% 0.008µs 1 200
credit_card/is_card_number_no_luhn/ 378282246310005 throughput 17004339.567op/s 17129390.600op/s ± 33392.354op/s 17132850.363op/s ± 23463.721op/s 17155443.026op/s 17171948.421op/s 17182100.547op/s 17183927.872op/s 0.30% -0.857 0.716 0.19% 2361.196op/s 1 200
credit_card/is_card_number_no_luhn/37828224631 execution_time 3.894µs 3.913µs ± 0.003µs 3.913µs ± 0.002µs 3.915µs 3.918µs 3.920µs 3.922µs 0.24% -0.728 6.265 0.08% 0.000µs 1 200
credit_card/is_card_number_no_luhn/37828224631 throughput 254975588.855op/s 255551647.548op/s ± 204237.690op/s 255584910.118op/s ± 122996.109op/s 255683802.443op/s 255800359.434op/s 255871213.920op/s 256824273.942op/s 0.48% 0.746 6.384 0.08% 14441.786op/s 1 200
credit_card/is_card_number_no_luhn/378282246310005 execution_time 55.203µs 55.548µs ± 0.180µs 55.538µs ± 0.102µs 55.632µs 55.865µs 56.026µs 56.352µs 1.47% 0.918 2.008 0.32% 0.013µs 1 200
credit_card/is_card_number_no_luhn/378282246310005 throughput 17745472.086op/s 18002606.746op/s ± 58192.433op/s 18005604.717op/s ± 33175.648op/s 18043569.189op/s 18088060.355op/s 18100532.719op/s 18114875.936op/s 0.61% -0.888 1.897 0.32% 4114.826op/s 1 200
credit_card/is_card_number_no_luhn/37828224631000521389798 execution_time 52.631µs 52.827µs ± 0.074µs 52.829µs ± 0.052µs 52.877µs 52.943µs 52.977µs 52.986µs 0.30% -0.069 -0.568 0.14% 0.005µs 1 200
credit_card/is_card_number_no_luhn/37828224631000521389798 throughput 18872851.403op/s 18929714.957op/s ± 26498.092op/s 18928821.971op/s ± 18672.453op/s 18948465.443op/s 18972337.158op/s 18986698.389op/s 19000096.307op/s 0.38% 0.075 -0.566 0.14% 1873.698op/s 1 200
credit_card/is_card_number_no_luhn/x371413321323331 execution_time 6.430µs 6.438µs ± 0.006µs 6.437µs ± 0.003µs 6.440µs 6.449µs 6.454µs 6.463µs 0.39% 1.254 2.028 0.09% 0.000µs 1 200
credit_card/is_card_number_no_luhn/x371413321323331 throughput 154738292.639op/s 155326004.794op/s ± 133080.850op/s 155347678.930op/s ± 76785.748op/s 155424199.548op/s 155485193.467op/s 155520681.097op/s 155532622.667op/s 0.12% -1.248 2.003 0.09% 9410.237op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
credit_card/is_card_number/ execution_time [3.911µs; 3.912µs] or [-0.009%; +0.009%] None None None
credit_card/is_card_number/ throughput [255621359.218op/s; 255669562.378op/s] or [-0.009%; +0.009%] None None None
credit_card/is_card_number/ 3782-8224-6310-005 execution_time [80.781µs; 80.868µs] or [-0.054%; +0.054%] None None None
credit_card/is_card_number/ 3782-8224-6310-005 throughput [12366071.378op/s; 12379322.268op/s] or [-0.054%; +0.054%] None None None
credit_card/is_card_number/ 378282246310005 execution_time [73.567µs; 73.661µs] or [-0.064%; +0.064%] None None None
credit_card/is_card_number/ 378282246310005 throughput [13575984.272op/s; 13593338.314op/s] or [-0.064%; +0.064%] None None None
credit_card/is_card_number/37828224631 execution_time [3.915µs; 3.915µs] or [-0.008%; +0.008%] None None None
credit_card/is_card_number/37828224631 throughput [255411299.049op/s; 255450203.557op/s] or [-0.008%; +0.008%] None None None
credit_card/is_card_number/378282246310005 execution_time [70.558µs; 70.637µs] or [-0.056%; +0.056%] None None None
credit_card/is_card_number/378282246310005 throughput [14157023.441op/s; 14172899.890op/s] or [-0.056%; +0.056%] None None None
credit_card/is_card_number/37828224631000521389798 execution_time [52.836µs; 52.859µs] or [-0.021%; +0.021%] None None None
credit_card/is_card_number/37828224631000521389798 throughput [18918464.474op/s; 18926571.304op/s] or [-0.021%; +0.021%] None None None
credit_card/is_card_number/x371413321323331 execution_time [6.444µs; 6.445µs] or [-0.008%; +0.008%] None None None
credit_card/is_card_number/x371413321323331 throughput [155159991.738op/s; 155186281.407op/s] or [-0.008%; +0.008%] None None None
credit_card/is_card_number_no_luhn/ execution_time [3.913µs; 3.914µs] or [-0.011%; +0.011%] None None None
credit_card/is_card_number_no_luhn/ throughput [255510915.224op/s; 255565000.261op/s] or [-0.011%; +0.011%] None None None
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 execution_time [65.142µs; 65.179µs] or [-0.028%; +0.028%] None None None
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 throughput [15342527.815op/s; 15351139.368op/s] or [-0.028%; +0.028%] None None None
credit_card/is_card_number_no_luhn/ 378282246310005 execution_time [58.364µs; 58.395µs] or [-0.027%; +0.027%] None None None
credit_card/is_card_number_no_luhn/ 378282246310005 throughput [17124762.741op/s; 17134018.459op/s] or [-0.027%; +0.027%] None None None
credit_card/is_card_number_no_luhn/37828224631 execution_time [3.913µs; 3.914µs] or [-0.011%; +0.011%] None None None
credit_card/is_card_number_no_luhn/37828224631 throughput [255523342.168op/s; 255579952.927op/s] or [-0.011%; +0.011%] None None None
credit_card/is_card_number_no_luhn/378282246310005 execution_time [55.523µs; 55.573µs] or [-0.045%; +0.045%] None None None
credit_card/is_card_number_no_luhn/378282246310005 throughput [17994541.835op/s; 18010671.658op/s] or [-0.045%; +0.045%] None None None
credit_card/is_card_number_no_luhn/37828224631000521389798 execution_time [52.817µs; 52.837µs] or [-0.019%; +0.019%] None None None
credit_card/is_card_number_no_luhn/37828224631000521389798 throughput [18926042.576op/s; 18933387.337op/s] or [-0.019%; +0.019%] None None None
credit_card/is_card_number_no_luhn/x371413321323331 execution_time [6.437µs; 6.439µs] or [-0.012%; +0.012%] None None None
credit_card/is_card_number_no_luhn/x371413321323331 throughput [155307561.068op/s; 155344448.520op/s] or [-0.012%; +0.012%] None None None

Group 15

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
single_flag_killswitch/rules-based execution_time 190.028ns 192.551ns ± 1.979ns 192.260ns ± 1.256ns 193.408ns 196.696ns 198.031ns 199.323ns 3.67% 0.972 0.664 1.03% 0.140ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
single_flag_killswitch/rules-based execution_time [192.277ns; 192.826ns] or [-0.142%; +0.142%] None None None

Group 16

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
benching string interning on wordpress profile execution_time 161.109µs 161.945µs ± 0.285µs 161.923µs ± 0.152µs 162.082µs 162.360µs 162.653µs 163.760µs 1.13% 2.212 12.336 0.18% 0.020µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
benching string interning on wordpress profile execution_time [161.906µs; 161.985µs] or [-0.024%; +0.024%] None None None

Group 17

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
normalization/normalize_trace/test_trace execution_time 242.945ns 254.519ns ± 12.269ns 249.017ns ± 4.454ns 257.289ns 283.644ns 287.890ns 289.182ns 16.13% 1.404 0.932 4.81% 0.868ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
normalization/normalize_trace/test_trace execution_time [252.818ns; 256.219ns] or [-0.668%; +0.668%] None None None

Group 18

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... execution_time 185.548µs 186.188µs ± 0.517µs 186.101µs ± 0.219µs 186.312µs 186.894µs 188.121µs 190.054µs 2.12% 3.538 18.753 0.28% 0.037µs 1 200
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... throughput 5261663.859op/s 5370953.034op/s ± 14757.303op/s 5373435.281op/s ± 6322.594op/s 5379798.473op/s 5384332.438op/s 5385309.599op/s 5389430.841op/s 0.30% -3.470 18.087 0.27% 1043.499op/s 1 200
normalization/normalize_name/normalize_name/bad-name execution_time 17.804µs 17.879µs ± 0.033µs 17.873µs ± 0.012µs 17.890µs 17.928µs 17.958µs 18.165µs 1.63% 3.751 28.225 0.18% 0.002µs 1 200
normalization/normalize_name/normalize_name/bad-name throughput 55051405.985op/s 55931785.532op/s ± 101853.991op/s 55950842.263op/s ± 38223.401op/s 55982349.096op/s 56051340.397op/s 56086247.228op/s 56167577.620op/s 0.39% -3.663 27.233 0.18% 7202.165op/s 1 200
normalization/normalize_name/normalize_name/good execution_time 10.522µs 10.568µs ± 0.021µs 10.563µs ± 0.013µs 10.582µs 10.603µs 10.621µs 10.649µs 0.81% 0.432 0.699 0.20% 0.001µs 1 200
normalization/normalize_name/normalize_name/good throughput 93906338.821op/s 94626759.135op/s ± 188803.707op/s 94666106.860op/s ± 120159.849op/s 94733966.673op/s 94960356.068op/s 95002656.508op/s 95042413.584op/s 0.40% -0.417 0.669 0.20% 13350.438op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... execution_time [186.117µs; 186.260µs] or [-0.038%; +0.038%] None None None
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... throughput [5368907.814op/s; 5372998.255op/s] or [-0.038%; +0.038%] None None None
normalization/normalize_name/normalize_name/bad-name execution_time [17.874µs; 17.884µs] or [-0.025%; +0.025%] None None None
normalization/normalize_name/normalize_name/bad-name throughput [55917669.549op/s; 55945901.516op/s] or [-0.025%; +0.025%] None None None
normalization/normalize_name/normalize_name/good execution_time [10.565µs; 10.571µs] or [-0.028%; +0.028%] None None None
normalization/normalize_name/normalize_name/good throughput [94600592.757op/s; 94652925.513op/s] or [-0.028%; +0.028%] None None None

Group 19

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
concentrator/add_spans_to_concentrator execution_time 12.991ms 13.022ms ± 0.015ms 13.020ms ± 0.010ms 13.032ms 13.046ms 13.060ms 13.089ms 0.53% 0.633 1.202 0.12% 0.001ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
concentrator/add_spans_to_concentrator execution_time [13.020ms; 13.024ms] or [-0.016%; +0.016%] None None None

Group 20

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 7e7908c 1774374409 gyuheon0h/PROF-14080-saguard-ct
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
receiver_entry_point/report/2598 execution_time 3.593ms 3.634ms ± 0.029ms 3.625ms ± 0.013ms 3.647ms 3.679ms 3.701ms 3.875ms 6.87% 3.292 22.341 0.79% 0.002ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
receiver_entry_point/report/2598 execution_time [3.630ms; 3.638ms] or [-0.110%; +0.110%] None None None

Baseline

Omitted due to size.

@gyuheon0h gyuheon0h requested a review from gleocadie March 20, 2026 18:15
Comment on lines +272 to +273
nix::sys::signal::Signal::SIGCHLD,
nix::sys::signal::Signal::SIGPIPE,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

are we sure those are the only signals to suppress?

Copy link
Copy Markdown
Collaborator Author

@gyuheon0h gyuheon0h Mar 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe so, because those are the only two signals the crash handler itself can cause:

SIGCHLD: handle_posix_signal_impl calls alt_fork() to spawn the collector child process and the receiver. When those children exit, the kernel delivers SIGCHLD to the parent.
SIGPIPE: The collector communicates over Unix socket pipes. If the receiver side closes early, writing to the pipe generates SIGPIPE.

The SaGuard's purpose isn't to block all signals but to prevent the crash handler from re-entering the application's signal handlers due to side effects of its own work

WDYT?

Copy link
Copy Markdown
Collaborator Author

@gyuheon0h gyuheon0h Mar 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For papertrail and context:

Suppressing SIGPIPE AND SIGCHLD was the previous behavior before this guard was accidentally removed.

I will investigate chaining SIGCHLD

@dd-octo-sts
Copy link
Copy Markdown
Contributor

dd-octo-sts bot commented Mar 20, 2026

Artifact Size Benchmark Report

aarch64-alpine-linux-musl
Artifact Baseline Commit Change
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.so 8.70 MB 8.70 MB 0% (0 B) 👌
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.a 101.42 MB 101.43 MB +0% (+6.69 KB) 👌
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 118.20 MB 118.21 MB +0% (+7.13 KB) 👌
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 11.29 MB 11.29 MB +0% (+312 B) 👌
libdatadog-x64-windows
Artifact Baseline Commit Change
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.dll 27.26 MB 27.26 MB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.lib 80.34 KB 80.34 KB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.pdb 186.51 MB 186.51 MB 0% (0 B) 👌
/libdatadog-x64-windows/debug/static/datadog_profiling_ffi.lib 921.90 MB 921.90 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.dll 8.99 MB 8.99 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.lib 80.34 KB 80.34 KB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.pdb 26.83 MB 26.83 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/static/datadog_profiling_ffi.lib 60.99 MB 60.99 MB 0% (0 B) 👌
libdatadog-x86-windows
Artifact Baseline Commit Change
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.dll 23.07 MB 23.07 MB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.lib 81.59 KB 81.59 KB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.pdb 190.75 MB 190.74 MB -0% (-8.00 KB) 👌
/libdatadog-x86-windows/debug/static/datadog_profiling_ffi.lib 905.43 MB 905.43 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.dll 6.86 MB 6.86 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.lib 81.59 KB 81.59 KB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.pdb 28.94 MB 28.94 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/static/datadog_profiling_ffi.lib 57.39 MB 57.39 MB 0% (0 B) 👌
x86_64-alpine-linux-musl
Artifact Baseline Commit Change
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.a 88.29 MB 88.29 MB +0% (+6.67 KB) 👌
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.so 10.28 MB 10.28 MB 0% (0 B) 👌
x86_64-unknown-linux-gnu
Artifact Baseline Commit Change
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.a 110.95 MB 110.96 MB +0% (+7.29 KB) 👌
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so 12.02 MB 12.02 MB +0% (+256 B) 👌

Copy link
Copy Markdown
Contributor

@gleocadie gleocadie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@gyuheon0h gyuheon0h force-pushed the gyuheon0h/PROF-14080-saguard-ct branch from fcdf081 to 7e7908c Compare March 24, 2026 17:47
@gh-worker-dd-mergequeue-cf854d gh-worker-dd-mergequeue-cf854d bot merged commit adaeb4e into main Mar 24, 2026
115 checks passed
@gh-worker-dd-mergequeue-cf854d gh-worker-dd-mergequeue-cf854d bot deleted the gyuheon0h/PROF-14080-saguard-ct branch March 24, 2026 19:07
gh-worker-dd-mergequeue-cf854d bot pushed a commit that referenced this pull request Mar 26, 2026
…ndler (#1807)

# What does this PR do?

This PR fixes a regression where SaGuard suppressed `SIGCHLD `with `SIG_IGN`, which can alter child reaping behavior (`waitpid`/`ECHILD`) and break `sigchld_exec` crash-test flows


Changes
1. Add per-signal suppression modes in `SaGuard`
2. Use split policy in crash handling
3. Loosen up restirctions in child cleanup in `ProcessHandle::finish`
4. serialize signal-global unit tests to avoid race condition modifying global state for saguard unit tests


# Motivation

Context: We were originally not blocking any signals. In [fix(crashtracking): guard sigchld and sigpipe during crashtracker signal handler execution](#1771), we started blocking sigchld and sigpipe. However, blocking sigchld causes deadlocks for the following test

[test(crashtracking): skip sigchld_exec test on CentOS 7 deadlock](#1804)


This change works because it prevents interference with the application's expected signal handling while still protecting the crash handler from re-entrant signals

# Additional Notes


# How to test the change?

`cargo nextest run -p libdd-crashtracker --lib -- collector::saguard::single_threaded_tests`
`cargo nextest run -p bin_tests test_crash_tracking_bin_sigchld_exec`


Co-authored-by: gyuheon.oh <gyuheon.oh@datadoghq.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants