]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Fix memory leak in std::barrier destructor [PR123378]
authorJonathan Wakely <jwakely@redhat.com>
Mon, 5 Jan 2026 17:29:40 +0000 (17:29 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Wed, 7 Jan 2026 15:20:45 +0000 (15:20 +0000)
When I replaced the std::unique_ptr member in r16-997-gef632273a90657 I
should have added an explicit delete[] operation to replace the effects
of the unique_ptr destructor.

libstdc++-v3/ChangeLog:

PR libstdc++/123378
* include/std/barrier (~__tree_barrier_base): Define.

Reviewed-by: Tomasz KamiƄski <tkaminsk@redhat.com>
libstdc++-v3/include/std/barrier

index 060285d6bf85d43199b31bc8a625e4e353d66168..0986ff9dada672d6145ee47da7c3265ebc156654 100644 (file)
@@ -114,6 +114,12 @@ It looks different from literature pseudocode for two main reasons:
        _M_state.store(_M_alloc_state().release(), memory_order_release);
     }
 
+    ~__tree_barrier_base()
+    { delete[] _M_state.load(memory_order_relaxed); }
+
+    __tree_barrier_base(const __tree_barrier_base&&) = delete;
+    __tree_barrier_base& operator=(const __tree_barrier_base&&) = delete;
+
     unique_ptr<__state_t[]>
     _M_alloc_state()
     {