Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix memory leak macos audio output #236

Closed
louis030195 opened this issue Aug 28, 2024 · 63 comments
Closed

fix memory leak macos audio output #236

louis030195 opened this issue Aug 28, 2024 · 63 comments

Comments

@louis030195
Copy link
Collaborator

/bounty 150

Copy link

algora-pbc bot commented Aug 28, 2024

💎 $150 bounty • Screenpi.pe

## 💎 $100 bounty • Screenpi.pe
## 💎 $80 bounty • Screenpi.pe

Steps to solve:

  1. Start working: Comment /attempt #236 with your implementation plan
  2. Submit work: Create a pull request including /claim #236 in the PR body to claim the bounty
  3. Receive payment: 100% of the bounty is received 2-5 days post-reward. Make sure you are eligible for payouts

Thank you for contributing to mediar-ai/screenpipe!

Add a bountyShare on socials

Attempt Started (GMT+0) Solution
🟢 @FractalFir #236

@louis030195
Copy link
Collaborator Author

@FractalFir
Copy link
Contributor

FractalFir commented Aug 28, 2024

I have looked at the issue a tiny bit, and have found some leads. Sadly, I don't have a mac device, so I can't test my theory.

First of all, I have found a very similar issue:
https://stackoverflow.com/questions/7018329/how-to-fix-cfruntimecreateinstance-object-leak

which was caused by using a single-threaded API on a second thread.

I see that Sync and Send are implemented for Devices in the context - is that correct?

unsafe impl Send for Devices {}
unsafe impl Sync for Devices {}

This seems a bit odd, since from what I can see, Device does not implement Send or Sync, which would suggest it can't be shared between threads safely? I could be wrong, but this looks like the underlying issue?

Does using this API on the main thread still cause the leak?

@louis030195
Copy link
Collaborator Author

@FractalFir i created a unit test which runs on the main thread but still detect leaks:

mod tests {
    use screencapturekit::sc_shareable_content::SCShareableContent;

    use super::*;
    use std::process::Command;
    use std::time::Duration;

    #[test]
    fn test_stream_no_memory_leaks() {
        // Create a dummy device and config
        let content = SCShareableContent::current();
        let displays = content.displays;
        let display = displays.first().unwrap_or_else(|| {
            panic!("Main display not found");
        });
        let display = display.to_owned();

        let device = Device::new(display);
        let config = StreamConfig {
            channels: 2,
            sample_rate: SampleRate(48000),
            buffer_size: crate::BufferSize::Default,
        };

        // Run the function multiple times to increase chances of detecting leaks
        for _ in 0..1 {
            let stream = device
                .build_input_stream(&config, SampleFormat::F32, |_data, _info| {}, |_err| {})
                .expect("Failed to build stream");

            // Play and pause the stream
            stream.play().expect("Failed to play stream");
            std::thread::sleep(Duration::from_millis(10000));
            stream.pause().expect("Failed to pause stream");
        }

        // Get the current process ID
        let pid = std::process::id();

        // Run the 'leaks' command
        let output = Command::new("leaks")
            .args(&[pid.to_string()])
            .output()
            .expect("Failed to execute leaks command");

        // Check the output for leaks
        let stdout = String::from_utf8_lossy(&output.stdout);
        let stderr = String::from_utf8_lossy(&output.stderr);

        println!("leaks stdout: {}", stdout);
        println!("leaks stderr: {}", stderr);

        if stdout.is_empty() && stderr.is_empty() {
            println!("Both stdout and stderr are empty. This might indicate that the 'leaks' command didn't run properly.");
        } else if !stdout.contains("leaks Report Version:") {
            println!("No leaks detected, but unexpected output format.");
        } else {
            assert!(
                !stdout.contains("Process"),
                "Memory leak detected: {}",
                stdout
            );
        }
    }
}

@FractalFir
Copy link
Contributor

FractalFir commented Aug 28, 2024

Tests in Rust don't run on the main thread. The test harness spawns a test per thread, and then runs the test on that thread. Is the issue still present when running on the main thread?

@louis030195
Copy link
Collaborator Author

yes still leaking (put in an example file)

@louis030195
Copy link
Collaborator Author

leaks stdout: Process:         macos_audio_output [12239]
Path:            /Users/USER/Documents/*/macos_audio_output
Load Address:    0x10042c000
Identifier:      macos_audio_output
Version:         0
Code Type:       ARM64
Platform:        macOS
Parent Process:  bash [6922]

Date/Time:       2024-08-28 12:08:06.748 +0200
Launch Time:     2024-08-28 12:07:55.100 +0200
OS Version:      macOS 14.5 (23F79)
Report Version:  7
Analysis Tool:   /Applications/Xcode.app/Contents/Developer/usr/bin/leaks
Analysis Tool Version:  Xcode 15.4 (15F31d)

Physical footprint:         7346K
Physical footprint (peak):  7362K
Idle exit:                  untracked
----

leaks Report Version: 4.0
Process 12239: 10649 nodes malloced for 1261 KB
Process 12239: 523 leaks for 26944 total leaked bytes.

    523 (26.3K) << TOTAL >>

      6 (768 bytes) ROOT LEAK: <__NSMallocBlock__ 0x12571aa80> [48]  macos_audio_output  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_con..."
         4 (688 bytes) 0x12571a880 [512]
            1 (96 bytes) 0x12571bc10 [96]
            1 (64 bytes) <pthread_mutex_t 0x12571bda0> [64]
            1 (16 bytes) 0x12571a6f0 [16]
         1 (32 bytes) 0x12571a7e0 [32]

      5 (752 bytes) ROOT LEAK: <__NSMallocBlock__ 0x126005c00> [48]  macos_audio_output  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$B$RP$$GT$$GT$::into_co..."
         3 (672 bytes) 0x126005a00 [512]
            1 (96 bytes) 0x12600af40 [96]
            1 (64 bytes) <pthread_mutex_t 0x12600cb70> [64]
         1 (32 bytes) 0x1260059e0 [32]

      5 (752 bytes) ROOT LEAK: <__NSMallocBlock__ 0x126704190> [48]  macos_audio_output  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_con..."
         3 (672 bytes) 0x126708c80 [512]
            1 (96 bytes) 0x1267092b0 [96]
            1 (64 bytes) <pthread_mutex_t 0x126708fa0> [64]
         1 (32 bytes) 0x126704370 [32]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x126408f30> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x1264084e0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x126409500> [48]

      1 (224 bytes) ROOT LEAK: <SCStreamConfiguration 0x125635090> [224]

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x12571d380> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x12571cde0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x12571d9d0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x12571d600> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      1 (48 bytes) ROOT LEAK: <CFString 0x115604090> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1156040d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115604120> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115604150> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115604180> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1156041b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1156041e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115604210> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115604240> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115604290> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1156042c0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1156042f0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115604320> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115604350> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115604380> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1156043b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115605ef0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115605f20> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115605f50> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115605f80> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115605fb0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115605fe0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115606010> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115606040> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115606070> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1156060a0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1156060d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115606100> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115606130> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115606160> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115606190> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1156061c0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1156061f0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115606220> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115606250> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115607f20> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115609570> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1156095a0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115609660> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613ab0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613ae0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613b10> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613b40> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613b70> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613ba0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613bd0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613c00> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613c30> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613c60> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613c90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613cc0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613cf0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613d20> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613d50> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613d80> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613db0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613de0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613e10> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613e40> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613e70> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613ea0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613ed0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613f00> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613f30> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613f60> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613f90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613fc0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115613ff0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115614020> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115614050> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115614080> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115704080> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157040b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157040e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115704110> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115704150> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115704180> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157041b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157041e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115704210> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x11570f4e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x11570f510> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x11570f540> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713500> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713530> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713560> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713590> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157135c0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157135f0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713620> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713650> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713680> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157136b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157136e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713710> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713740> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713770> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157137a0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157137f0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713820> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713850> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713880> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157138b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157138e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713910> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713940> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713970> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157139a0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157139d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713a00> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713a30> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713a60> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713a90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713ac0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713af0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713b20> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713b50> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713b80> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713bb0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713be0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713c10> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713c40> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713c90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713cc0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713cf0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713d20> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713d50> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713e10> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713e40> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713e70> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713ea0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713ed0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713f00> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713f30> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713f60> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713f90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713fc0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115713ff0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115714020> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115714050> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115714080> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157140c0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157140f0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115714120> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115714150> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115714180> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157141b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1157141e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115714300> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115714340> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115714400> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x115714430> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004090> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1170040c0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004110> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004140> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004c10> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004c40> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004c70> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004ca0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004cd0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004d20> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004d50> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004d80> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004db0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004de0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004e10> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004e40> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004e80> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004eb0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004ee0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004f10> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004f40> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004f70> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004fa0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117004fd0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117005000> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117005030> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117005060> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117005090> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1170050c0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1170050f0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117005120> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1170138a0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1170138d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013900> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013930> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013960> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1170139b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1170139e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013a10> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013a40> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013a70> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013aa0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013ad0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013b00> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013b30> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013b70> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013ba0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013bd0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013c00> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013d10> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013d40> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013d70> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013da0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013dd0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013e00> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013e30> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013e60> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013e90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013ec0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117013f80> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117014020> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117104090> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1171040c0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117104110> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1171041d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117104200> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117104230> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117104260> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117104290> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1171042c0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1171042f0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117104320> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117104350> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x117104380> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1171043b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12563c130> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12563c170> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12564b700> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12564b730> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x125654ac0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12565a210> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12565a4d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12565a5a0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12565a750> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1256612d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x125661320> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12571ace0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12571ad80> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12571ba80> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12571bba0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12571c4a0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12571c5e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12571c8b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12571ca60> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12571ca90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12571cba0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12571ce10> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12571d570> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12603f960> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12603fc20> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126040080> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1260409d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126040f10> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126041010> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126041070> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1260413d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126041b30> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126105de0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126106960> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126106990> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126107070> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1261070a0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1261070d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126107550> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204130> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204400> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204430> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204460> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204490> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1262044d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204550> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204580> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1262045b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1262045e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204610> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204670> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204720> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204750> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204780> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1262047d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204820> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204970> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204a00> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204a30> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204a60> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204a90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204ad0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204bc0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204bf0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204c20> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204c50> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204c80> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204cb0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204ce0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204d10> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204d40> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204e00> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204e30> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204e60> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126204eb0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1262106c0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126210830> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12621aca0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126304080> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1263040b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1263040e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126304110> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126304140> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126304170> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1263041a0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1263041d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126304200> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126304230> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126304260> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126304290> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126304350> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126304380> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1263043b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126304440> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1263044e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126304510> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126304540> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126304570> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1263045a0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630c190> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630c1c0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630c1f0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630c220> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630c250> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630c280> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630c2b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630c2e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630c310> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630c340> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630dda0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630ddd0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630de00> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630de30> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630de60> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630de90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630dec0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630def0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630df20> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630df50> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630df80> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630dfb0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630dfe0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630e010> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630e040> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12630e070> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12640e450> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12640fe00> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1264100a0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126410f90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126411070> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1264110d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126411940> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126411b90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1264120e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126412cd0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126413150> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1264134b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126415a60> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126415ba0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1264161a0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126416690> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126416c00> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126416dc0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126416f90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126417b90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126504f80> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126505a80> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126505ab0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126505d70> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506180> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506c20> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506c50> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506c80> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506cb0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506ce0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506d10> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506d40> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506d70> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506da0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506dd0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506e00> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506e30> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506e60> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506e90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506ec0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506ef0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506f20> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506f50> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126506f80> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12650c5a0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12650c5d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12650c600> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12650c630> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12650c660> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12650c690> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12650c6c0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12650c6f0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12650c720> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12650c750> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12650c780> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12650c7b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12650c7e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12650c8a0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12650c8d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12650c900> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604080> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1266040b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1266040e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604110> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604140> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604170> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1266041b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1266041f0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604220> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604250> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604280> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1266042b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1266042e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604310> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604360> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1266043a0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1266043d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604400> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604ca0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604cd0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604d00> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604d30> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604d70> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604da0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604dd0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604e00> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604e30> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604e60> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604e90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604ec0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604ef0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126604fb0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1266082e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126608320> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126608350> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126608380> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1266083b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1266083e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126608b90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126608bc0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126608bf0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12660f9f0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12660fa20> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12660fa50> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12660fa80> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12660fab0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12660fae0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12660fb10> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12660fb40> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12660fb70> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12660fba0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12660fbd0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12660fc00> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12660fc30> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12660fc60> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x12660fc90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126612100> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126612130> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126612160> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126612190> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126704080> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126704130> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126704160> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1267041c0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1267041f0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126704220> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126704250> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126704280> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1267042b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1267042e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126704310> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126704340> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126704390> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1267043c0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1267043f0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126704420> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126704450> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126704480> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1267044b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x1267044e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126704510> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126704540> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126704570> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126708b80> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126708bb0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126708be0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x126708c10> [48]


@louis030195
Copy link
Collaborator Author

i noticed if i comment the body of play() it will still leak but less so probably there is issue in the build_input_stream and also after

@louis030195
Copy link
Collaborator Author

@FractalFir
Copy link
Contributor

OK, so this is unlikely to be a thread issue.
All of those strings are 48 bytes in size, so they are likely the same.

The leak seems to happen in StreamFrameInfo::status, so this string could be allocated here:

https://github.com/svtlabs/screencapturekit-rs/blob/9a6b9f346bd30de0d2f9a02af36d4cf6461f4f3b/screencapturekit-sys/src/sc_stream_frame_info.rs#L33

It seems to be sent to the Objective-C side, so maybe something went wrong there?

Could you somehow obtain a StreamFrameInfo in your code, and then call status a couple of times to check if this is the issue?

@louis030195
Copy link
Collaborator Author

louis030195 commented Aug 28, 2024

image

seems like it? many more leaks

i commented inside of did_output_audio_sample_buffer and called 100 times the status() and cargo run --example macos_audio_output again:

    fn did_output_audio_sample_buffer(&self, sample_buffer: CMSampleBuffer) {
        for _ in 0..100 {
            sample_buffer.sys_ref.get_frame_info().status();
        }
        // let buffers = sample_buffer.sys_ref.get_av_audio_buffer_list();
        // let channels = buffers[0].number_channels;
        // let mut data = raw_buffers_to_stream_data(buffers);
        // let len = data.len();
        // let data = data.as_mut_ptr() as *mut ();
        // let data = unsafe { Data::from_parts(data, len, self.sample_format) };

        // let cm_time = sample_buffer.sys_ref.get_presentation_timestamp();
        // let buffer_frames = len / channels as usize;
        // let callback = host_time_to_stream_instant(cm_time);
        // let delay = frames_to_duration(buffer_frames, self.stream_config.sample_rate);
        // let capture = callback
        //     .sub(delay)
        //     .expect("`capture` occurs before origin of alsa `StreamInstant`");
        // let timestamp = crate::InputStreamTimestamp { callback, capture };
        // let info = InputCallbackInfo { timestamp };

        // let mut data_callback = self.data_callback.lock().unwrap();
        // data_callback(&data, &info);
    }

@FractalFir

@louis030195
Copy link
Collaborator Author

okay i did something

image

@louis030195
Copy link
Collaborator Author

will test more

@louis030195
Copy link
Collaborator Author

Screenshot 2024-08-28 at 13 59 27

5-20 leaks every 10 seconds (instead of 300-600), releasing new version then will iterate on this

@louis030195
Copy link
Collaborator Author

Screenshot 2024-08-28 at 14 01 36

ok nvm this does not look good

@FractalFir
Copy link
Contributor

FractalFir commented Aug 28, 2024

I have found something interesting, although I am not sure if this is related.

The objective-C function which leaks memory(__CFStringCreateImmutableFunnel3) has some interesting documentation.

https://opensource.apple.com/source/CF/CF-855.14/CFString.c

/* contentsDeallocator indicates how to free the data if it's noCopy == true:
	kCFAllocatorNull: don't free
	ALLOCATORSFREEFUNC: free with main allocator's free func (don't pass in the real func ptr here)
	NULL: default allocator
	otherwise it's the allocator that should be used (it will be explicitly stored)
   if noCopy == false, then freeFunc should be ALLOCATORSFREEFUNC
   hasLengthByte, hasNullByte: refers to bytes; used only if encoding != Unicode
   possiblyExternalFormat indicates that the bytes might have BOM and be swapped
   tryToReduceUnicode means that the Unicode should be checked to see if it contains just ASCII (and reduce it if so)
   numBytes contains the actual number of bytes in "bytes", including Length byte, 
	BUT not the NULL byte at the end
   bytes should not contain BOM characters
   !!! Various flags should be combined to reduce number of arguments, if possible
*/

Here, it says that the memory may be not freed if the allocator is set to kCFAllocatorNull - that could be the cause.

I also have an idea for a fix: create the string only once, and store it in static OnceLock / or a lazy_static!.

This way, the leak will only happen once, and the 48 byte string will be reused.

@FractalFir
Copy link
Contributor

FractalFir commented Aug 28, 2024

Fix idea:


fn get_SCStreamUpdateFrameStatus()->NSString{
    use std::sync::OnceLock;
    static SCStreamUpdateFrameStatus:OnceLock<NSString> = OnceLock::new();
    SCStreamUpdateFrameStatus.get_or_init(||NSString::from_str("SCStreamUpdateFrameStatus")).copy()
}
impl SCStreamFrameInfo {
    pub fn status(&self) -> SCFrameStatus {
        unsafe {
            let key = get_SCStreamUpdateFrameStatus();
            let raw_status: *mut NSValue<i32> = msg_send!(self, objectForKey: key);
            if raw_status.is_null() {
                return SCFrameStatus::Idle;
            }
            mem::transmute((*raw_status).value())
        }
    }
}

If I understand things correctly, this should allocate only one NString (which, AFAIK, is a reference counted type), and then return references to that type.

I am not sure if the call to copy copies the reference to the string, or the string itself, however. If it copies just the reference, then this should work. If not, then a different solution is needed.

@FractalFir
Copy link
Contributor

I see that you closed this issue. Did my solution work?

@louis030195 louis030195 reopened this Aug 28, 2024
@louis030195
Copy link
Collaborator Author

@FractalFir no your code does not compile

i fixed it here https://github.com/mediar-ai/screencapturekit-rs

but there is still a small leak, but won't have much more time to allocate on this today

@FractalFir
Copy link
Contributor

but there is still a small leak, but won't have much more time to allocate on this today

OK, no problem.

I don't know how those bounty things work. Does what I did count as working towards the bounty, or not?

@louis030195
Copy link
Collaborator Author

@FractalFir you can claim the bounty using / claim - however would appreciate help for fixing the last leak if possible (if it's too hard to fix i can add another bounty) - cannot focus on the other issue right now

@louis030195
Copy link
Collaborator Author

#196

example how to claim

@louis030195
Copy link
Collaborator Author

/tip @FractalFir 100

@FractalFir
Copy link
Contributor

Also, just to double-check: are you running with MallocStackLogging set to 1?

From what I can recall, this should give more detailed leak stack traces, but I am not sure if it is not already enabled, and it just does not work with Rust.

@louis030195
Copy link
Collaborator Author

@louis030195
Copy link
Collaborator Author

not sure this is what u asked but i found this:

    let display = SCShareableContent::current().displays.pop().unwrap();
    let windows = SCShareableContent::current().windows;
    let _filter = SCContentFilter::new(InitParams::DisplayExcludingWindows(display, windows));
leaks Report Version: 4.0, multi-line stacks
Process 70380: 6056 nodes malloced for 597 KB
Process 70380: 1 leak for 2048 total leaked bytes.

STACK OF 1 INSTANCE OF 'ROOT LEAK: <NSArray>':
24  dyld                                  0x19fa6e0e0 start + 2360
23  leak                                  0x100960658 main + 36
22  leak                                  0x100961d4c std::rt::lang_start::hbf253debbfb5da83 + 84  rt.rs:158
21  leak                                  0x1009b25f4 std::rt::lang_start_internal::h27a134f18d582a1e + 640
20  leak                                  0x100961d80 std::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::hd7f53490fb601a3d + 28  rt.rs:159
19  leak                                  0x10095eab4 std::sys_common::backtrace::__rust_begin_short_backtrace::hbd676431ce47ec6b + 24  backtrace.rs:161
18  leak                                  0x100960ad8 core::ops::function::FnOnce::call_once::h87f13f6285a6f5bc + 20  function.rs:250
17  leak                                  0x10096031c leak::main::h76222d92e030bf7f + 532  leak.rs:17
16  leak                                  0x100964958 screencapturekit::sc_content_filter::SCContentFilter::new::h1187ee761f9159b7 + 40
15  leak                                  0x10096edf4 screencapturekit_sys::content_filter::UnsafeContentFilter::init::hc4c55424b3852b42 + 3484
14  leak                                  0x10096bb1c objc_foundation::array::INSArray::from_vec::h6e295729c4db5b75 + 188
13  leak                                  0x10096bf1c objc_foundation::array::from_refs::h33ab87bf8723f48d + 628
12  leak                                  0x100977ed0 objc::message::platform::send_unverified::h2777d4f3c78360fe + 168
11  leak                                  0x100994cf0 objc::exception::try::h4ab38e298712c9aa + 12
10  leak                                  0x100973448 objc_exception::try::h2cfe4c3bb47477c7 + 80
9   leak                                  0x1009708b0 objc_exception::try_no_ret::h0824cf3e38071054 + 160
8   leak                                  0x10099c4dc RustObjCExceptionTryCatch + 36
7   leak                                  0x100972718 objc_exception::try_no_ret::try_objc_execute_closure::h3eda01e6daf331c1 + 84
6   leak                                  0x100975534 objc_exception::try::_$u7b$$u7b$closure$u7d$$u7d$::hc687d64be163b511 + 48
5   leak                                  0x10097bb30 objc::message::platform::send_unverified::_$u7b$$u7b$closure$u7d$$u7d$::hc6c0f2ad0f4d5140 + 68
4   leak                                  0x10098dd3c _$LT$$LP$A$C$B$RP$$u20$as$u20$objc..message..MessageArguments$GT$::invoke::hb6739993b6e55e49 + 136
3   com.apple.CoreFoundation              0x19fe91888 __NSArrayI_new + 92
2   com.apple.CoreFoundation              0x19fe5c9d0 __CFAllocateObject + 20
1   libobjc.A.dylib                       0x19fa1fe7c class_createInstance + 68
0   libsystem_malloc.dylib                0x19fc30d1c _malloc_zone_calloc_instrumented_or_legacy + 240 
====
    1 (2.00K) ROOT LEAK: <NSArray 0x12c813800> [2048]

@FractalFir
Copy link
Contributor

Ok, so it seems like two of the leaks involve a function named RustObjCExceptionTryCatch.

Those two leaks happen when creating SCContentFilter or SCStreamConfiguration. So, my theory would be that creating them fails, the and the exception is not handled properly, which causes a leak.

So, I would double-check if screencapturekit_sys::content_filter::UnsafeContentFilter::init and From<screencapturekit_sys::stream_configuration::UnsafeStreamConfiguration> for screencapturekit_sys::stream_configuration::UnsafeStreamConfigurationRef are implemented correctly, and don't throw any exceptions.

At this point, I am almost certain something goes wrong when calling UnsafeContentFilter::init.

@louis030195
Copy link
Collaborator Author

hmm

wrapped in autoreleasepool: mediar-ai/screencapturekit-rs@2c77304

and this does not leak anymore:

    let display = SCShareableContent::current().displays.pop().unwrap();
    let windows = SCShareableContent::current().windows;
    let _filter = SCContentFilter::new(InitParams::DisplayExcludingWindows(display, windows));

cpal output: https://gist.github.com/louis030195/2140d40e0b27056b811582d1b5cb2ee1

still shows leaks, is there something else?

@louis030195
Copy link
Collaborator Author

louis030195 commented Aug 29, 2024

this leaks

let config = SCStreamConfiguration {
    width: 1920,
    height: 1080,
    captures_audio: true,
    pixel_format: PixelFormat::ARGB8888,
    scales_to_fit: true,
    shows_cursor: true,
    preserves_aspect_ratio: true,
    queue_depth: 5,
    sample_rate: 44100,
    channel_count: 2,
    excludes_current_process_audio: false,
    ..Default::default()
};
let init_params = InitParams::Display(display);
let filter = SCContentFilter::new(init_params);
let mut sc_stream = SCStream::new(filter, config, Capturer {});
let output = Capturer {};
sc_stream.add_output(output, SCStreamOutputType::Audio);
leaks Report Version: 4.0, multi-line stacks
Process 73977: 7575 nodes malloced for 886 KB
Process 73977: 2 leaks for 240 total leaked bytes.

STACK OF 1 INSTANCE OF 'ROOT LEAK: <SCStreamConfiguration>':
23  dyld                                  0x19fa6e0e0 start + 2360
22  leak                                  0x1047d6b60 main + 36
21  leak                                  0x1047e0c04 std::rt::lang_start::hbf253debbfb5da83 + 84  rt.rs:158
20  leak                                  0x1048460ac std::rt::lang_start_internal::h27a134f18d582a1e + 640
19  leak                                  0x1047e0c38 std::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::hd7f53490fb601a3d + 28  rt.rs:159
18  leak                                  0x1047d140c std::sys_common::backtrace::__rust_begin_short_backtrace::hbd676431ce47ec6b + 24  backtrace.rs:161
17  leak                                  0x1047dbf8c core::ops::function::FnOnce::call_once::h87f13f6285a6f5bc + 20  function.rs:250
16  leak                                  0x1047d67f4 leak::main::h76222d92e030bf7f + 540  leak.rs:70
15  leak                                  0x1047d9a1c screencapturekit::sc_stream::SCStream::new::hc1a712a51f90081e + 68  sc_stream.rs:0
14  leak                                  0x1047d9930 _$LT$T$u20$as$u20$core..convert..Into$LT$U$GT$$GT$::into::he8db2d20efc619ba + 12  mod.rs:760
13  leak                                  0x1047e3d6c screencapturekit::sc_stream_configuration::_$LT$impl$u20$core..convert..From$LT$screencapturekit..sc_stream_configuration..SCStreamConfiguration$GT$$u20$for$u20$objc_id..id..Id$LT$screencapturekit_sys..stream_configuration..UnsafeStreamConfigurationRef$GT$$GT$::from::hf24e8a374332729a + 48
12  leak                                  0x1047e3d34 _$LT$T$u20$as$u20$core..convert..Into$LT$U$GT$$GT$::into::hfbac22df0571c6a9 + 12
11  leak                                  0x104804b04 screencapturekit_sys::stream_configuration::_$LT$impl$u20$core..convert..From$LT$screencapturekit_sys..stream_configuration..UnsafeStreamConfiguration$GT$$u20$for$u20$objc_id..id..Id$LT$screencapturekit_sys..stream_configuration..UnsafeStreamConfigurationRef$GT$$GT$::from::h303bbc276092c257 + 388
10  leak                                  0x1047fb648 objc::message::platform::send_unverified::h8c5b6470220102a7 + 136
9   leak                                  0x104823500 objc::exception::try::hf3fa7f7dfe1b0c22 + 12
8   leak                                  0x1047f4adc objc_exception::try::h8657023963359e6a + 72
7   leak                                  0x1047f138c objc_exception::try_no_ret::h8ca9db1ee62330cc + 144
6   leak                                  0x10482fe08 RustObjCExceptionTryCatch + 36
5   leak                                  0x1047f2e38 objc_exception::try_no_ret::try_objc_execute_closure::h4af44c9f8c5db106 + 76
4   leak                                  0x1047f684c objc_exception::try::_$u7b$$u7b$closure$u7d$$u7d$::h962f80e3d469f8b0 + 44
3   leak                                  0x1047ff264 objc::message::platform::send_unverified::_$u7b$$u7b$closure$u7d$$u7d$::hb60c1c8d8ecfbd0e + 60
2   leak                                  0x1048194b4 _$LT$$LP$$RP$$u20$as$u20$objc..message..MessageArguments$GT$::invoke::h2cb9e94ae505c9aa + 72
1   libobjc.A.dylib                       0x19fa25d84 _objc_rootAllocWithZone + 44
0   libsystem_malloc.dylib                0x19fc30d1c _malloc_zone_calloc_instrumented_or_legacy + 240 
====
    1 (224 bytes) ROOT LEAK: <SCStreamConfiguration 0x137e36f90> [224]

STACK OF 1 INSTANCE OF 'ROOT LEAK: <calloc in _objc_rootAllocWithZone>':
21  dyld                                  0x19fa6e0e0 start + 2360
20  leak                                  0x1047d6b60 main + 36
19  leak                                  0x1047e0c04 std::rt::lang_start::hbf253debbfb5da83 + 84  rt.rs:158
18  leak                                  0x1048460ac std::rt::lang_start_internal::h27a134f18d582a1e + 640
17  leak                                  0x1047e0c38 std::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::hd7f53490fb601a3d + 28  rt.rs:159
16  leak                                  0x1047d140c std::sys_common::backtrace::__rust_begin_short_backtrace::hbd676431ce47ec6b + 24  backtrace.rs:161
15  leak                                  0x1047dbf8c core::ops::function::FnOnce::call_once::h87f13f6285a6f5bc + 20  function.rs:250
14  leak                                  0x1047d6820 leak::main::h76222d92e030bf7f + 584  leak.rs:72
13  leak                                  0x1047d99bc screencapturekit::sc_stream::SCStream::add_output::h0038333fc5e1539f + 132  sc_stream.rs:28
12  leak                                  0x1047dde00 screencapturekit_sys::stream::UnsafeSCStream::add_stream_output::h95ae9586f099d790 + 568  stream.rs:82
11  leak                                  0x1047e085c objc_foundation::object::INSObject::new::h7cabf3cc1cd310cd + 288  object.rs:48
10  leak                                  0x1047d4ea0 objc::message::platform::send_unverified::hfffb7215d60fde8e + 136  mod.rs:12
9   leak                                  0x1047d1500 objc::exception::try::h8e15be274556d7e2 + 12  exception.rs:8
8   leak                                  0x1047df930 objc_exception::try::h89f033998b396557 + 72  lib.rs:67
7   leak                                  0x1047dea2c objc_exception::try_no_ret::h90464458b637ef5b + 144  lib.rs:44
6   leak                                  0x10482fe08 RustObjCExceptionTryCatch + 36
5   leak                                  0x1047df378 objc_exception::try_no_ret::try_objc_execute_closure::hefe691e2c3fccc10 + 76  lib.rs:35
4   leak                                  0x1047dfcf0 objc_exception::try::_$u7b$$u7b$closure$u7d$$u7d$::h01536c2ea9bc1755 + 44  lib.rs:68
3   leak                                  0x1047d5b58 objc::message::platform::send_unverified::_$u7b$$u7b$closure$u7d$$u7d$::h7db7e1ccddcfe3f9 + 60  mod.rs:12
2   leak                                  0x1047e0ba4 _$LT$$LP$$RP$$u20$as$u20$objc..message..MessageArguments$GT$::invoke::hbda2d0e3f85cd588 + 72  mod.rs:129
1   libobjc.A.dylib                       0x19fa25d84 _objc_rootAllocWithZone + 44
0   libsystem_malloc.dylib                0x19fc30d1c _malloc_zone_calloc_instrumented_or_legacy + 240 
====
    1 (16 bytes) ROOT LEAK: <calloc in _objc_rootAllocWithZone 0x137f39960> [16]


@FractalFir
Copy link
Contributor

FractalFir commented Aug 29, 2024

Well, the good news is that SCContentFilter no longer seems to leak. So, only SCStreamConfiguration now leaks, I will look into the leak in SCStreamConfiguration::from

This function seems to be responsible for this conversion, and it looks a bit fishy to me. The commented-out setter is especially odd - to me, this looks like it caused some issue, and someone commented it out instead of solving the underlying problem. So, it would not be unreasonable to assume that there are more issues like this.

https://github.com/mediar-ai/screencapturekit-rs/blob/2c77304479dfb4374cb5a095b36274f44eef0a49/screencapturekit-sys/src/stream_configuration.rs#L18

impl From<UnsafeStreamConfiguration> for Id<UnsafeStreamConfigurationRef> {
    fn from(config: UnsafeStreamConfiguration) -> Self {
        unsafe {
            let alloc: *mut Object = msg_send![UnsafeStreamConfigurationRef::class(), alloc];
            let obj: *mut Object = objc::rc::autoreleasepool(|| {
                let obj: *mut Object = msg_send![alloc, init];

                // Set properties
                let _: () = msg_send![obj, setWidth: config.width];
                let _: () = msg_send![obj, setHeight: config.height];
                let _: () = msg_send![obj, setCapturesAudio: config.captures_audio];
                let _: () = msg_send![obj, setSourceRect: config.source_rect];
                let _: () = msg_send![obj, setDestinationRect: config.destination_rect];
                let _: () = msg_send![obj, setPixelFormat: config.pixel_format];
                let _: () = msg_send![obj, setMinimumFrameInterval: config.minimum_frame_interval];
                let _: () = msg_send![obj, setScalesToFit: config.scales_to_fit];
                let _: () = msg_send![obj, setShowsCursor: config.shows_cursor];
                let _: () = msg_send![obj, setChannelCount: config.channel_count];
                let _: () = msg_send![obj, setSampleRate: config.sample_rate];
                // Uncomment if this setter is available in the API
                // let _: () = msg_send![obj, setPreservesAspectRatio: config.preserves_aspect_ratio];

                obj
            });

            if obj.is_null() {
                panic!("Failed to create UnsafeStreamConfigurationRef");
            }

            Id::from_ptr(obj as *mut UnsafeStreamConfigurationRef)
        }
    }
}

Once again, a RustObjCExceptionTryCatch can be seen in the stack trace, so I would guess this leak is also(?) caused by an uncaught exception. Overall, I would look somewhere here for the root cause.

EDIT: I have tried to discover why the call to setPreservesAspectRatio was originally commented out, hoping someone has encountered an issue like this - however, the commit message explains almost nothing.

@louis030195
Copy link
Collaborator Author

Process 83010: 1 leak for 2048 total leaked bytes.

STACK OF 1 INSTANCE OF 'ROOT LEAK: <NSArray>':
26  dyld                                  0x19fa6e0e0 start + 2360
25  leak                                  0x102713bbc main + 36
24  leak                                  0x10271d374 std::rt::lang_start::hbf253debbfb5da83 + 84  rt.rs:158
23  leak                                  0x102782928 std::rt::lang_start_internal::h27a134f18d582a1e + 640
22  leak                                  0x10271d3a8 std::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::hd7f53490fb601a3d + 28  rt.rs:159
21  leak                                  0x10270e68c std::sys_common::backtrace::__rust_begin_short_backtrace::hbd676431ce47ec6b + 24  backtrace.rs:161
20  leak                                  0x102718f6c core::ops::function::FnOnce::call_once::h87f13f6285a6f5bc + 20  function.rs:250
19  leak                                  0x102713280 leak::main::h76222d92e030bf7f + 596  leak.rs:43
18  leak                                  0x1027201b4 screencapturekit::sc_content_filter::SCContentFilter::new::h1187ee761f9159b7 + 40
17  leak                                  0x10272aa08 screencapturekit_sys::content_filter::UnsafeContentFilter::init::ha59c91abcd22c36d + 960
16  leak                                  0x1027456b8 objc::rc::autorelease::autoreleasepool::h7b89573edd18aac8 + 112
15  leak                                  0x1027485c0 screencapturekit_sys::content_filter::UnsafeContentFilter::init::_$u7b$$u7b$closure$u7d$$u7d$::hf7d3ff98fb90d354 + 380
14  leak                                  0x10272807c objc_foundation::array::INSArray::from_vec::h6e295729c4db5b75 + 188
13  leak                                  0x10272847c objc_foundation::array::from_refs::h33ab87bf8723f48d + 628
12  leak                                  0x102737054 objc::message::platform::send_unverified::h2777d4f3c78360fe + 168
11  leak                                  0x10275fb40 objc::exception::try::h4ab38e298712c9aa + 12
10  leak                                  0x102730904 objc_exception::try::h2cfe4c3bb47477c7 + 80
9   leak                                  0x10272cbc8 objc_exception::try_no_ret::h0824cf3e38071054 + 160
8   leak                                  0x10276c684 RustObjCExceptionTryCatch + 36
7   leak                                  0x10272f4f8 objc_exception::try_no_ret::try_objc_execute_closure::h3eda01e6daf331c1 + 84
6   leak                                  0x102733358 objc_exception::try::_$u7b$$u7b$closure$u7d$$u7d$::hc687d64be163b511 + 48
5   leak                                  0x10273befc objc::message::platform::send_unverified::_$u7b$$u7b$closure$u7d$$u7d$::hc6c0f2ad0f4d5140 + 68
4   leak                                  0x1027572d0 _$LT$$LP$A$C$B$RP$$u20$as$u20$objc..message..MessageArguments$GT$::invoke::hb6739993b6e55e49 + 136
3   com.apple.CoreFoundation              0x19fe91888 __NSArrayI_new + 92
2   com.apple.CoreFoundation              0x19fe5c9d0 __CFAllocateObject + 20
1   libobjc.A.dylib                       0x19fa1fe7c class_createInstance + 68
0   libsystem_malloc.dylib                0x19fc30d1c _malloc_zone_calloc_instrumented_or_legacy + 240 
====
    1 (2.00K) ROOT LEAK: <NSArray 0x12200f400> [2048]

i feel like leaks command is non deterministic, i think there is still issue on both UnsafeContentFilter and UnsafeStreamConfiguration

@louis030195
Copy link
Collaborator Author

@FractalFir
Copy link
Contributor

Was this feature enabled before, and did enabling it fix the leaks?
Also, does enabling "verify_message" change anything? I fell like that could rule out some other potential issues.

@louis030195
Copy link
Collaborator Author

they have the feat on upstream https://github.com/svtlabs/screencapturekit-rs/blob/9a6b9f346bd30de0d2f9a02af36d4cf6461f4f3b/screencapturekit-sys/Cargo.toml#L27

did not change

will try the verify_message

@louis030195
Copy link
Collaborator Author

most things are fixed (i believe), thanks 🙏

ill fix this last one later (gtg)

Physical footprint:         6066K
Physical footprint (peak):  6082K
Idle exit:                  untracked
----

leaks Report Version: 4.0, multi-line stacks
Process 5334: 12538 nodes malloced for 1193 KB
Process 5334: 1 leak for 224 total leaked bytes.

STACK OF 1 INSTANCE OF 'ROOT LEAK: <SCStreamConfiguration>':
25  dyld                                  0x19fa6e0e0 start + 2360
24  leak                                  0x102b22978 main + 36
23  leak                                  0x102b2c10c std::rt::lang_start::hbf253debbfb5da83 + 84  rt.rs:158
22  leak                                  0x102b924cc std::rt::lang_start_internal::h27a134f18d582a1e + 640
21  leak                                  0x102b2c140 std::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::hd7f53490fb601a3d + 28  rt.rs:159
20  leak                                  0x102b1d424 std::sys_common::backtrace::__rust_begin_short_backtrace::hbd676431ce47ec6b + 24  backtrace.rs:161
19  leak                                  0x102b27d28 core::ops::function::FnOnce::call_once::h87f13f6285a6f5bc + 20  function.rs:250
18  leak                                  0x102b22590 leak::main::h76222d92e030bf7f + 1996  leak.rs:61
17  leak                                  0x102b257b8 screencapturekit::sc_stream::SCStream::new::hc1a712a51f90081e + 68  sc_stream.rs:0
16  leak                                  0x102b256cc _$LT$T$u20$as$u20$core..convert..Into$LT$U$GT$$GT$::into::he8db2d20efc619ba + 12  mod.rs:760
15  leak                                  0x102b2f274 screencapturekit::sc_stream_configuration::_$LT$impl$u20$core..convert..From$LT$screencapturekit..sc_stream_configuration..SCStreamConfiguration$GT$$u20$for$u20$objc_id..id..Id$LT$screencapturekit_sys..stream_configuration..UnsafeStreamConfigurationRef$GT$$GT$::from::hf24e8a374332729a + 48
14  leak                                  0x102b2f23c _$LT$T$u20$as$u20$core..convert..Into$LT$U$GT$$GT$::into::hfbac22df0571c6a9 + 12
13  leak                                  0x102b4fe74 screencapturekit_sys::stream_configuration::_$LT$impl$u20$core..convert..From$LT$screencapturekit_sys..stream_configuration..UnsafeStreamConfiguration$GT$$u20$for$u20$objc_id..id..Id$LT$screencapturekit_sys..stream_configuration..UnsafeStreamConfigurationRef$GT$$GT$::from::hee477dfaa78ff1e6 + 148
12  leak                                  0x102b52a08 objc::rc::autorelease::autoreleasepool::hb5969c4911debc1f + 112
11  leak                                  0x102b5d8d8 screencapturekit_sys::stream_configuration::_$LT$impl$u20$core..convert..From$LT$screencapturekit_sys..stream_configuration..UnsafeStreamConfiguration$GT$$u20$for$u20$objc_id..id..Id$LT$screencapturekit_sys..stream_configuration..UnsafeStreamConfigurationRef$GT$$GT$::from::_$u7b$$u7b$closure$u7d$$u7d$::hbcc94ece165648f4 + 304
10  leak                                  0x102b470a8 objc::message::platform::send_unverified::hecceebaf7d334a9f + 136
9   leak                                  0x102b6f894 objc::exception::try::hd989aeece3baa958 + 12
8   leak                                  0x102b3faa8 objc_exception::try::hbe9fd473da645d90 + 72
7   leak                                  0x102b3ad88 objc_exception::try_no_ret::h19840b29b3cee5c9 + 144
6   leak                                  0x102b7c228 RustObjCExceptionTryCatch + 36
5   leak                                  0x102b3e134 objc_exception::try_no_ret::try_objc_execute_closure::hfc53324dcf5dbd7e + 76
4   leak                                  0x102b41484 objc_exception::try::_$u7b$$u7b$closure$u7d$$u7d$::ha391d7eab5a0b2df + 44
3   leak                                  0x102b48aa8 objc::message::platform::send_unverified::_$u7b$$u7b$closure$u7d$$u7d$::h56aa810409fb6d0b + 60
2   leak                                  0x102b661a8 _$LT$$LP$$RP$$u20$as$u20$objc..message..MessageArguments$GT$::invoke::h9cfcb104498431d2 + 72
1   libobjc.A.dylib                       0x19fa25d84 _objc_rootAllocWithZone + 44
0   libsystem_malloc.dylib                0x19fc30d1c _malloc_zone_calloc_instrumented_or_legacy + 240 
====
    1 (224 bytes) ROOT LEAK: <SCStreamConfiguration 0x11d743970> [224]


@louis030195
Copy link
Collaborator Author

louis030195 commented Aug 29, 2024

/tip $80 @FractalFir

.

Copy link

algora-pbc bot commented Aug 29, 2024

🎉🎈 @FractalFir has been awarded $80! 🎈🎊

@FractalFir
Copy link
Contributor

Thank you for the tip!

@louis030195
Copy link
Collaborator Author

louis030195 commented Aug 29, 2024

adding for reference for next fixes (also think there is leak in cpal i noticed but minor):

Process:         screenpipe [17088]
Path:            /Applications/screenpipe.app/Contents/MacOS/screenpipe
Load Address:    0x102f80000
Identifier:      screenpipe
Version:         0
Code Type:       ARM64
Platform:        macOS
Parent Process:  screenpipe-app [16781]

Date/Time:       2024-08-29 19:06:17.780 +0200
Launch Time:     2024-08-29 18:39:08.226 +0200
OS Version:      macOS 14.5 (23F79)
Report Version:  7
Analysis Tool:   /Applications/Xcode.app/Contents/Developer/usr/bin/leaks
Analysis Tool Version:  Xcode 15.4 (15F31d)

Physical footprint:         9.9G
Physical footprint (peak):  16.0G
Idle exit:                  untracked
----

leaks Report Version: 4.0
Process 17088: 523461 nodes malloced for 6579157 KB
Process 17088: 834 leaks for 74368 total leaked bytes.

    834 (72.6K) << TOTAL >>

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x600001594090> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x14ae2f180 [512]
            1 (224 bytes) <SCStreamConfiguration 0x600002364b60> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x60000345c800> [128]
               1 (32 bytes) 0x600001a89de0 [32]
            1 (96 bytes) 0x600003e10000 [96]
            1 (64 bytes) <pthread_mutex_t 0x60000003b3c0> [64]
         1 (32 bytes) 0x600001a8a4a0 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x600001595170> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x149e43a00 [512]
            1 (224 bytes) <SCStreamConfiguration 0x600002362760> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x6000034cc100> [128]
               1 (32 bytes) 0x600001a6b160 [32]
            1 (96 bytes) 0x600003e3bcc0 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000f814c0> [64]
         1 (32 bytes) 0x600001a68640 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x6000015aabe0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x14ad5a280 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000023f1500> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x60000356c100> [128]
               1 (32 bytes) 0x600001be7e20 [32]
            1 (96 bytes) 0x600003eec960 [96]
            1 (64 bytes) <pthread_mutex_t 0x6000000c8b00> [64]
         1 (32 bytes) 0x600001be43a0 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x600001605d40> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x14a882600 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000023eb640> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x600003569800> [128]
               1 (32 bytes) 0x600001b9d780 [32]
            1 (96 bytes) 0x600003edee20 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000f58880> [64]
         1 (32 bytes) 0x600001b9e980 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x60000160bea0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x14aacc800 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000023e5b20> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x6000034ae200> [128]
               1 (32 bytes) 0x600001b21080 [32]
            1 (96 bytes) 0x600003ea57a0 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000f5b9c0> [64]
         1 (32 bytes) 0x600001b20880 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x60000161d7a0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x138a2df80 [512]
            1 (224 bytes) <SCStreamConfiguration 0x600002366140> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x600003568e00> [128]
               1 (32 bytes) 0x600001b9cd00 [32]
            1 (96 bytes) 0x600003eb6220 [96]
            1 (64 bytes) <pthread_mutex_t 0x6000000f0b80> [64]
         1 (32 bytes) 0x600001b9f200 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x600001629140> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x14ad45400 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000023f02a0> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x6000034a6500> [128]
               1 (32 bytes) 0x600001be3b20 [32]
            1 (96 bytes) 0x600003eed800 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000f41300> [64]
         1 (32 bytes) 0x600001be36c0 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x6000016311d0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x14af66900 [512]
            1 (224 bytes) <SCStreamConfiguration 0x600002311340> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x6000034d3a00> [128]
               1 (32 bytes) 0x600001a92840 [32]
            1 (96 bytes) 0x600003e03de0 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000f410c0> [64]
         1 (32 bytes) 0x600001a930a0 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x600001634480> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x138a2b180 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000023442a0> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x6000034be900> [128]
               1 (32 bytes) 0x600001c784e0 [32]
            1 (96 bytes) 0x600003ec1080 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000f0df00> [64]
         1 (32 bytes) 0x600001c78620 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x600001637630> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x11c056200 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000023cee60> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x600003496580> [128]
               1 (32 bytes) 0x600001c575e0 [32]
            1 (96 bytes) 0x600003e934e0 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000005080> [64]
         1 (32 bytes) 0x600001c55f20 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x600001646220> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x149e84900 [512]
            1 (224 bytes) <SCStreamConfiguration 0x600002315c00> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x600003480000> [128]
               1 (32 bytes) 0x600001b5f900 [32]
            1 (96 bytes) 0x600003ec1b60 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000012680> [64]
         1 (32 bytes) 0x600001b5d800 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x600001647c90> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x14a84ff00 [512]
            1 (224 bytes) <SCStreamConfiguration 0x600002318b60> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x6000034ca100> [128]
               1 (32 bytes) 0x600001bcc0c0 [32]
            1 (96 bytes) 0x600003ef4000 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000059700> [64]
         1 (32 bytes) 0x600001bce280 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x60000164c8d0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x119c07c00 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000023f8000> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x6000034ae600> [128]
               1 (32 bytes) 0x600001be0660 [32]
            1 (96 bytes) 0x600003eeaa60 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000f20d40> [64]
         1 (32 bytes) 0x600001be0de0 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x60000167d3e0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x119c12200 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000023f5180> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x600003486180> [128]
               1 (32 bytes) 0x600001b152e0 [32]
            1 (96 bytes) 0x600003e20d20 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000f0d840> [64]
         1 (32 bytes) 0x600001b163e0 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x600001683690> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x119cf3500 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000023ceae0> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x600003524100> [128]
               1 (32 bytes) 0x600001c0a8a0 [32]
            1 (96 bytes) 0x600003eb1e00 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000005b00> [64]
         1 (32 bytes) 0x600001c08e60 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x600001685fe0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x149e19400 [512]
            1 (224 bytes) <SCStreamConfiguration 0x600002380ee0> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x60000352c000> [128]
               1 (32 bytes) 0x600001cf1c40 [32]
            1 (96 bytes) 0x600003e8e340 [96]
            1 (64 bytes) <pthread_mutex_t 0x6000000e7900> [64]
         1 (32 bytes) 0x600001cf2660 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x60000168dd40> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x11c0ab100 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000023902a0> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x60000353c300> [128]
               1 (32 bytes) 0x600001cb7880 [32]
            1 (96 bytes) 0x600003f73cc0 [96]
            1 (64 bytes) <pthread_mutex_t 0x6000000a19c0> [64]
         1 (32 bytes) 0x600001cb4f60 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x6000016cc2a0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x149fc2800 [512]
            1 (224 bytes) <SCStreamConfiguration 0x600002302840> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x600003560700> [128]
               1 (32 bytes) 0x600001c3c0a0 [32]
            1 (96 bytes) 0x600003ecbe40 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000fe3dc0> [64]
         1 (32 bytes) 0x600001c3c060 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x6000016ddb00> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x14a8ea800 [512]
            1 (224 bytes) <SCStreamConfiguration 0x60000231be20> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x600003543c80> [128]
               1 (32 bytes) 0x600001c54720 [32]
            1 (96 bytes) 0x600003eb3de0 [96]
            1 (64 bytes) <pthread_mutex_t 0x60000000a9c0> [64]
         1 (32 bytes) 0x600001c56780 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x6000016f1050> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x119c1f680 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000023f5ce0> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x600003495300> [128]
               1 (32 bytes) 0x600001bf3cc0 [32]
            1 (96 bytes) 0x600003ec6a00 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000f27480> [64]
         1 (32 bytes) 0x600001bf2ce0 [32]

      8 (1.11K) ROOT LEAK: <__NSMallocBlock__ 0x600001748ed0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x14a8b1580 [512]
            1 (224 bytes) <SCStreamConfiguration 0x60000245cee0> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x600003614000> [128]
               1 (32 bytes) 0x600001d8df00 [32]
            1 (96 bytes) 0x600003fae400 [96]
            1 (64 bytes) <pthread_mutex_t 0x6000000c7900> [64]
         1 (32 bytes) 0x600001d8d080 [32]

      7 (1.08K) ROOT LEAK: <__NSMallocBlock__ 0x600001546250> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x149e41c00 [512]
            1 (224 bytes) <SCStreamConfiguration 0x600002320b60> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x60000345ce00> [128]
               1 (32 bytes) 0x600001aa9a00 [32]
            1 (96 bytes) 0x600003e005a0 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000fe3540> [64]

      7 (1.08K) ROOT LEAK: <__NSMallocBlock__ 0x6000015829a0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x149e1d200 [512]
            1 (224 bytes) <SCStreamConfiguration 0x600002360380> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x6000034c0780> [128]
               1 (32 bytes) 0x600001a825e0 [32]
            1 (96 bytes) 0x600003e36820 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000024a40> [64]

      7 (1.08K) ROOT LEAK: <__NSMallocBlock__ 0x6000015925b0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x14af59d00 [512]
            1 (224 bytes) <SCStreamConfiguration 0x600002336e60> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x6000034c9b80> [128]
               1 (32 bytes) 0x600001b6a9a0 [32]
            1 (96 bytes) 0x600003e1b9c0 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000fe7c00> [64]

      7 (1.08K) ROOT LEAK: <__NSMallocBlock__ 0x600001607420> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x149ed3e00 [512]
            1 (224 bytes) <SCStreamConfiguration 0x600002354380> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x600003498b00> [128]
               1 (32 bytes) 0x600001bd3680 [32]
            1 (96 bytes) 0x600003ea4c60 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000fe1900> [64]

      7 (1.08K) ROOT LEAK: <__NSMallocBlock__ 0x60000165a580> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         5 (1.00K) 0x14ae31280 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000023ece00> [224]
            1 (128 bytes) <dispatch_queue_t (concurrent) 0x6000034af300> [128]
            1 (96 bytes) 0x600003ef3300 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000fe1b80> [64]
         1 (32 bytes) 0x600001a94d00 [32]

      7 (1.08K) ROOT LEAK: <__NSMallocBlock__ 0x6000016c41e0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         6 (1.03K) 0x14a992880 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000023d2300> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x600003552c00> [128]
               1 (32 bytes) 0x600001c11ec0 [32]
            1 (96 bytes) 0x600003e9ed60 [96]
            1 (64 bytes) <pthread_mutex_t 0x60000000d940> [64]

      7 (1.05K) ROOT LEAK: <__NSMallocBlock__ 0x6000016e4ff0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         5 (992 bytes) 0x14acd3a00 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000023f6920> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x600003567f80> [128]
               1 (32 bytes) 0x600001c7ec20 [32]
            1 (96 bytes) 0x600003ea74e0 [96]
         1 (32 bytes) 0x600001c7e4e0 [32]

      6 (1.05K) ROOT LEAK: <__NSMallocBlock__ 0x6000015aa610> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         5 (1.00K) 0x14a9a7a00 [512]
            1 (224 bytes) <SCStreamConfiguration 0x60000235fd40> [224]
            1 (128 bytes) <dispatch_queue_t (concurrent) 0x6000034c3400> [128]
            1 (96 bytes) 0x600003e3eee0 [96]
            1 (64 bytes) <pthread_mutex_t 0x6000000f8480> [64]

      6 (1.05K) ROOT LEAK: <__NSMallocBlock__ 0x600001678ed0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         5 (1.00K) 0x14af0bc80 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000023ec460> [224]
            1 (128 bytes) <dispatch_queue_t (concurrent) 0x6000034a7680> [128]
            1 (96 bytes) 0x600003ea8720 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000f0f280> [64]

      7 (1.02K) ROOT LEAK: <__NSMallocBlock__ 0x6000016709f0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         5 (960 bytes) 0x149ec3200 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000023f0540> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x600003561c80> [128]
               1 (32 bytes) 0x600001c4d680 [32]
            1 (64 bytes) <pthread_mutex_t 0x6000000377c0> [64]
         1 (32 bytes) 0x600001c4eb40 [32]

      7 (1.02K) ROOT LEAK: <__NSMallocBlock__ 0x60000169c1e0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         5 (960 bytes) 0x127a25600 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000024502a0> [224]
            2 (160 bytes) <dispatch_queue_t (concurrent) 0x6000035f4500> [128]
               1 (32 bytes) 0x600001d71ec0 [32]
            1 (64 bytes) <pthread_mutex_t 0x60000002a000> [64]
         1 (32 bytes) 0x600001d70b20 [32]

      6 (976 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000155fa80> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         4 (896 bytes) 0x14af24180 [512]
            1 (224 bytes) <SCStreamConfiguration 0x600002341180> [224]
            1 (96 bytes) 0x600003e28900 [96]
            1 (64 bytes) <pthread_mutex_t 0x6000000ab780> [64]
         1 (32 bytes) 0x600001a5ae00 [32]

      6 (976 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000166b750> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         4 (896 bytes) 0x14a95e180 [512]
            1 (224 bytes) <SCStreamConfiguration 0x600002315420> [224]
            1 (96 bytes) 0x600003ecd3e0 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000fe2100> [64]
         1 (32 bytes) 0x600001be18a0 [32]

      5 (944 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000168e6d0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         4 (896 bytes) 0x14adc3700 [512]
            1 (224 bytes) <SCStreamConfiguration 0x6000023ca5a0> [224]
            1 (96 bytes) 0x600003e82640 [96]
            1 (64 bytes) <pthread_mutex_t 0x600000f201c0> [64]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002d0c000> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x60000397f7a0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001668b10> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002d2de40> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x6000039f6fd0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001623f30> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002d3b2e0> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x60000397da90> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001591f20> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002d3cbb0> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x6000039d9950> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x6000015a94a0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002d43a70> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a4d220> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001656040> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002d4e050> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x6000039db390> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x60000164f3f0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002d52c00> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003b1b390> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x60000173e010> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002d58d10> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a93c50> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x6000016cb750> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002d72100> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003b504b0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x60000175c0c0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002d74a50> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003915860> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x6000015bd980> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002d74e70> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x60000390a580> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x6000015d8690> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002d75760> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a2a940> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x60000163c5a0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002d7f650> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003b6cbe0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x60000169f7e0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002d886e0> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x6000039c5cc0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x60000163a910> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002d98000> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003b1d540> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x60000174b5d0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002da2100> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003af1db0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001610db0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002daeaa0> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003adea80> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x6000016e5260> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002daecb0> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a212c0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x6000016dd050> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002dafd30> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003aea580> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001607f90> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002db1290> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a15cc0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001621920> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002dbc000> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a18af0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001635410> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002dbe520> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003aa2710> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x60000161e3d0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002dc0fd0> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003916800> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x60000159d860> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002dc5080> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003b80b40> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x60000171f1b0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002dc6940> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a1def0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x60000165c3f0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002dc8000> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a4b250> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001670690> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002dcfd30> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a31450> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001655230> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002dd0000> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x6000039bc460> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x60000162e9d0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002dd1340> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003be0550> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x6000016bcf90> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002ddd6b0> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a6fc00> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001673bd0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002de0160> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a55720> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x60000163d230> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002deaec0> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x60000395bde0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001775230> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002dffc80> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x60000399b110> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001669c50> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002e35e40> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a18f00> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x6000016e1ce0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002e4c000> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a03020> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x6000016133c0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002e4d340> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a455e0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001647d80> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002e55760> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003bd3430> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x60000171b7e0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002e58000> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003917f20> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x6000015b8930> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002e58c60> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a426c0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001678ab0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002e59080> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a8f250> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x6000016a8cf0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002e5dad0> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003ad33e0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x60000168e160> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002e70f20> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x6000039131b0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001633000> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002e76730> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003abd9f0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x6000016ea4f0> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002e7da20> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003bc37f0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001732520> [48]

      3 (304 bytes) ROOT LEAK: <SCContentFilter 0x600002ecff40> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003bcb7f0> [80]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x600001719c20> [48]

      2 (256 bytes) ROOT LEAK: <SCContentFilter 0x600002d92050> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x6000039da0d0> [80]

      2 (256 bytes) ROOT LEAK: <SCContentFilter 0x600002da9ce0> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003986530> [80]

      2 (256 bytes) ROOT LEAK: <SCContentFilter 0x600002db3c80> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003b71f90> [80]

      2 (256 bytes) ROOT LEAK: <SCContentFilter 0x600002dcc6e0> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003afb070> [80]

      2 (256 bytes) ROOT LEAK: <SCContentFilter 0x600002dd6cb0> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003b77750> [80]

      2 (256 bytes) ROOT LEAK: <SCContentFilter 0x600002e402c0> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a92080> [80]

      2 (256 bytes) ROOT LEAK: <SCContentFilter 0x600002e542c0> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x600003a3ab20> [80]

      2 (256 bytes) ROOT LEAK: <SCContentFilter 0x600002e73440> [176]
         1 (80 bytes) __strong _filterID --> <Swift.StringStorage 0x6000039ecf00> [80]

      2 (224 bytes) ROOT LEAK: <SCContentFilter 0x600002ec88f0> [176]
         1 (48 bytes) __strong _excludedWindows --> <NSMutableArray 0x60000173f0c0> [48]

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001455470> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001455380> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000014622b0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000014623d0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000155f000> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x60000155cab0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000155fc60> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x60000155f900> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001596f70> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001596010> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001597840> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000015977e0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001598f30> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000014547b0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000159b660> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x60000159b030> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000159d230> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x60000159c3c0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000015bb3f0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000015baa00> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000015bb6c0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000015ba5b0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000015bb720> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000015b8ea0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000015bbf90> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000015ba250> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000015be6a0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000015bf990> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000015bf1e0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000015bc540> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000015df090> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000015dd0b0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000015df750> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000015de970> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001600e40> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001602be0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001602190> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001602670> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016028e0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001602a00> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001603570> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001602100> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001614090> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016170f0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001615950> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001614f90> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016162b0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001617060> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001616880> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001615770> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001620de0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001623b70> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001622c40> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001621b30> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001626370> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016276c0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001626f70> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001626c10> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000162e9a0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x60000162fba0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000162ed00> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x60000162d4d0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001640a50> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001648780> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001640b40> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x60000164d980> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001645a70> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001644f60> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001647930> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001647360> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000164f7e0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x60000164cbd0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001653c00> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001653c60> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001653f60> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001651380> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001658570> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001658d80> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016585a0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001658ea0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000165af10> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001658750> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000165bba0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x60000165aa30> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000165c6f0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x60000165c0f0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000165ce40> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x60000165dc20> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000165e1c0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001620600> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001662430> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001662400> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001665710> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001646400> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016780f0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001679950> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000167d470> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x60000167cf00> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000168ba50> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016883f0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000168cf90> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001749320> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016963a0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001697540> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001696a60> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001696970> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016c1020> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016c1560> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016c1320> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016c3630> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016c1410> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016c1650> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016c1440> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016c2e50> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016c4cc0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016c5b90> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016c71e0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016c7cf0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016c97d0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016c9aa0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016e6550> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016e4fc0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016e6610> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016e7e70> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016e7420> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016e4f60> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016e7900> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016e6d90> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016f44e0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016f43f0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016f51a0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016f4ff0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016f5e90> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016f6b20> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016f8870> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016fb810> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016f91d0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000016fa970> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001703c00> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001702220> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001710b70> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001712580> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001718570> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000017197d0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000171b3c0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001718e40> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000017349f0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001737d80> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001735710> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001734e10> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000173e850> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000017001e0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000017422e0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001741350> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001745e60> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x6000017497a0> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001749620> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001749650> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000174a340> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001779b60> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000174b510> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x600001749950> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteVideoReceiveQueue:]_block_invoke  ..."

      2 (96 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000177a3d0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
         1 (48 bytes) <__NSMallocBlock__ 0x60000177ac10> [48]  ScreenCaptureKit  __59-[SCStream(SCContentSharing) startRemoteAudioReceiveQueue:]_block_invoke  ..."

      2 (80 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016358c0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         1 (32 bytes) 0x600001c04640 [32]

      2 (80 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001700f00> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         1 (32 bytes) 0x600001dce520 [32]

      2 (80 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000170c120> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         1 (32 bytes) 0x600001e724e0 [32]

      2 (80 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001748540> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         1 (32 bytes) 0x600001db61a0 [32]

      2 (80 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001778a50> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         1 (32 bytes) 0x600001e4eb60 [32]

      2 (80 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000177eb50> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         1 (32 bytes) 0x600001dac0e0 [32]

      2 (80 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000017f1d70> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
         1 (32 bytes) 0x600001dee2e0 [32]

      1 (64 bytes) ROOT LEAK: <CFString 0x600000003740> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000007f80> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000008e40> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000008fc0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000091c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000098c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x60000000b300> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x60000000c080> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x60000000c580> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x60000000dc40> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000012b40> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000012d80> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000014780> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000016840> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000016f40> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000019580> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x60000001f3c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x60000001f840> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000021d40> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000021e00> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000022ac0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000024440> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000257c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000027bc0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000034340> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000037f80> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000389c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000039280> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000044240> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000045180> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000495c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x60000004ad80> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x60000004c580> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x60000004f2c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x60000004f500> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x60000004fec0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000052180> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000535c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000058440> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000058b00> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000059f40> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x60000005e340> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x60000007a4c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x60000007ad80> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000a8180> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000a9200> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000ac900> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000adc00> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000b54c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000b9740> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000c1d40> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000ca1c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000cb3c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000d7500> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000d8980> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000d9080> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000dc0c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000e0bc0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000eb700> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000ed240> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000f0d40> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000f58c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000f59c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x6000000f8180> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000141040> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000142940> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f00180> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f01640> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f0cf80> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f0e100> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f0e380> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f0e3c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f0ecc0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f206c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f21b80> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f24740> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f248c0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f25100> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f25140> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f26fc0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f27600> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f27680> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f27880> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f27940> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f42980> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f43dc0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f4ea80> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f4ed40> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f4f400> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f53c80> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f60f40> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f61580> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f61f40> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f69fc0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f71800> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f7fbc0> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000f81900> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000fe1540> [64]
      1 (64 bytes) ROOT LEAK: <CFString 0x600000fe2280> [64]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001443cc0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x60000144c000> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001469170> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001477240> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x60000158f1e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x6000015a2250> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x6000015a3cc0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x6000015a3ed0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x6000015abb40> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x6000015d5200> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x6000015d7630> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001605920> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x60000160a610> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x60000160fab0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x6000016151a0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x60000161c060> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001620090> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001623240> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001630000> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001635b90> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x6000016419e0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001643f30> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001648090> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x60000165c810> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x60000165d440> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x60000165f2d0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001662370> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001662520> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001667d20> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001668000> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x60000166ce70> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x60000166e2b0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x60000168bae0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x60000168e190> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x6000016946c0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x6000016bd650> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x6000016c0810> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x6000016cabe0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x6000016cb390> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x6000016d0f60> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x6000016dcfc0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x6000016e1bc0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001700db0> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001704000> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x60000170ea30> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001748150> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x60000174fc30> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x60000175f210> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x60000176e880> [48]
      1 (48 bytes) ROOT LEAK: <CFString 0x600001778db0> [48]
      1 (48 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001476c10> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
      1 (48 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000159b8a0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
      1 (48 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000160de90> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
      1 (48 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000160eac0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
      1 (48 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001661140> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
      1 (48 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001669aa0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
      1 (48 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000167f750> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
      1 (48 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016df1e0> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
      1 (48 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016e8f60> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
      1 (48 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016f4360> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
      1 (48 bytes) ROOT LEAK: <__NSMallocBlock__ 0x6000016f4e10> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
      1 (48 bytes) ROOT LEAK: <__NSMallocBlock__ 0x600001741470> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
      1 (48 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000175f3f0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
      1 (48 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000176da70> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
      1 (48 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000176fea0> [48]  screenpipe  _$LT$X$u20$as$u20$block..IntoConcreteBlock$LT$$LP$A$C$$RP$$GT$$GT$::into_concrete_bl..."
      1 (48 bytes) ROOT LEAK: <__NSMallocBlock__ 0x60000177bc00> [48]  CMCapture  __FigRemoteOperationReceiverCreateMessageReceiver_block_invoke  0x1bdf333c8
      1 (32 bytes) ROOT LEAK: <CFString 0x600001a0f600> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001a4b5a0> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001a6c8a0> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001b0ee40> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001b34600> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001b3af00> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001b62cc0> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001b77660> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001b7b4c0> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001b859c0> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001b889c0> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001b8baa0> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001b94540> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001b99bc0> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001baf040> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001bb2060> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001bb8c40> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001be2840> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001be9d80> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001c0aca0> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001c15760> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001c38e00> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001c59380> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001c7ab00> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001c7f5c0> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001cf5b60> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001d24620> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001d65280> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001d7f420> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001d94d80> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001dc5460> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001ddc5c0> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001ddd8a0> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001e24940> [32]
      1 (32 bytes) ROOT LEAK: <CFString 0x600001e73260> [32]
      1 (16 bytes) ROOT LEAK: 0x60000186c0d0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186c360 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186c390 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186c3d0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186c640 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186c660 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186c680 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186c6c0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186c6e0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186c720 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186c750 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186c780 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186c7b0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186c7e0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186c820 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186c860 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186c880 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186c8a0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186d130 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186d200 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186d2b0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186fcc0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186fce0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186fda0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186fdb0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000186fdd0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000187bcd0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000187bd10 [16]
      1 (16 bytes) ROOT LEAK: 0x60000187bd40 [16]
      1 (16 bytes) ROOT LEAK: 0x60000187bd70 [16]
      1 (16 bytes) ROOT LEAK: 0x60000187bda0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000187bdd0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000187be00 [16]
      1 (16 bytes) ROOT LEAK: 0x60000187be30 [16]
      1 (16 bytes) ROOT LEAK: 0x60000187be60 [16]
      1 (16 bytes) ROOT LEAK: 0x60000187be90 [16]
      1 (16 bytes) ROOT LEAK: 0x60000187bec0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000187bef0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000187bf20 [16]
      1 (16 bytes) ROOT LEAK: 0x60000187bf50 [16]
      1 (16 bytes) ROOT LEAK: 0x60000187bf80 [16]
      1 (16 bytes) ROOT LEAK: 0x60000187bfb0 [16]
      1 (16 bytes) ROOT LEAK: 0x60000187bfe0 [16]


im kind of puzzled why im the only one facing these issues despite seems to be used in many libs

@louis030195
Copy link
Collaborator Author

#199 fixed btw on the way

@louis030195
Copy link
Collaborator Author

going to fix last memory leak now

@louis030195
Copy link
Collaborator Author

louis030195 commented Aug 30, 2024

solved 1

next up

@louis030195
Copy link
Collaborator Author

louis030195 commented Aug 30, 2024

maybe not a leak but this code is trash that i did:

async fn get_macos_version() -> Option<f32> {
    let output = Command::new("sw_vers")
        .arg("-productVersion")
        .output()
        .await
        .ok()?;
    let version = String::from_utf8(output.stdout).ok()?;
    version.split('.').next()?.parse().ok()
}

will fix this now

@louis030195
Copy link
Collaborator Author

louis030195 commented Aug 30, 2024

RustAudio/coreaudio-rs#125

so ...

good news:

  • found alternative to use system audio through virtual device which does not use the hacky screencapturekit impl which leaks - which means only the coreaudio-rs issue above leaks but it's very minor (1 leak every 30s)

bad news:

  • users have to create a virtual device which connect system audio & their device & the loopback thing, see screenshot, trying to see if i can automate this through blackhole api (talking w them now)

@louis030195
Copy link
Collaborator Author

Screenshot 2024-08-30 at 16 29 51 Screenshot 2024-08-30 at 17 10 37 Screenshot 2024-08-30 at 17 10 50

@louis030195
Copy link
Collaborator Author

solved

@Poordeveloper
Copy link

@louis030195 what final solution have you chosen? blackhole or osx new api?

@kaiwen-wang
Copy link

^

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants