From add2055b0dbc8a6f6cda986a41481ca0061c1e05 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Tue, 3 May 2016 01:50:17 +0200 Subject: [PATCH] Stop leaking memory allocators in DeckLinkCapture. --- decklink_capture.cpp | 6 ++++-- decklink_capture.h | 8 ++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/decklink_capture.cpp b/decklink_capture.cpp index a4753cb..2519caa 100644 --- a/decklink_capture.cpp +++ b/decklink_capture.cpp @@ -384,10 +384,12 @@ HRESULT STDMETHODCALLTYPE DeckLinkCapture::VideoInputFrameArrived( void DeckLinkCapture::configure_card() { if (video_frame_allocator == nullptr) { - set_video_frame_allocator(new MallocFrameAllocator(FRAME_SIZE, NUM_QUEUED_VIDEO_FRAMES)); // FIXME: leak. + owned_video_frame_allocator.reset(new MallocFrameAllocator(FRAME_SIZE, NUM_QUEUED_VIDEO_FRAMES)); + set_video_frame_allocator(owned_video_frame_allocator.get()); } if (audio_frame_allocator == nullptr) { - set_audio_frame_allocator(new MallocFrameAllocator(65536, NUM_QUEUED_AUDIO_FRAMES)); // FIXME: leak. + owned_audio_frame_allocator.reset(new MallocFrameAllocator(65536, NUM_QUEUED_AUDIO_FRAMES)); + set_audio_frame_allocator(owned_audio_frame_allocator.get()); } } diff --git a/decklink_capture.h b/decklink_capture.h index f547116..59c3b02 100644 --- a/decklink_capture.h +++ b/decklink_capture.h @@ -36,6 +36,9 @@ public: void set_video_frame_allocator(FrameAllocator *allocator) override { video_frame_allocator = allocator; + if (owned_video_frame_allocator.get() != allocator) { + owned_video_frame_allocator.reset(); + } } FrameAllocator *get_video_frame_allocator() override @@ -47,6 +50,9 @@ public: void set_audio_frame_allocator(FrameAllocator *allocator) override { audio_frame_allocator = allocator; + if (owned_audio_frame_allocator.get() != allocator) { + owned_audio_frame_allocator.reset(); + } } FrameAllocator *get_audio_frame_allocator() override @@ -102,6 +108,8 @@ private: FrameAllocator *video_frame_allocator = nullptr; FrameAllocator *audio_frame_allocator = nullptr; + std::unique_ptr owned_video_frame_allocator; + std::unique_ptr owned_audio_frame_allocator; frame_callback_t frame_callback = nullptr; IDeckLinkConfiguration *config = nullptr; -- 2.39.2