diff --git a/crates/kingfisher-rules/data/rules/airbrake.yml b/crates/kingfisher-rules/data/rules/airbrake.yml index 3c27ac4..e755027 100644 --- a/crates/kingfisher-rules/data/rules/airbrake.yml +++ b/crates/kingfisher-rules/data/rules/airbrake.yml @@ -36,8 +36,8 @@ rules: - words: - '"id"' type: WordMatch - - type: Word - match_words: + - words: - '"type":"Unauthorized"' + type: WordMatch negative: true url: https://api.airbrake.io/api/v4/projects?key={{ TOKEN }} \ No newline at end of file diff --git a/src/scanner/runner.rs b/src/scanner/runner.rs index e7828c7..c9a034b 100644 --- a/src/scanner/runner.rs +++ b/src/scanner/runner.rs @@ -723,6 +723,12 @@ async fn run_sequential_scan( })(); input_roots.extend(streamed_roots); + // Drop the receiver before joining producers. If `scan_result` is Err, + // the loop exited early and producers could be blocked on `send` against + // a full bounded channel; dropping `repo_rx` makes those sends return Err + // so the threads can exit and `join()` doesn't deadlock. + drop(repo_rx); + if let Some(handle) = repo_clone_handle { let _ = handle.join(); }