dangling_raw_ptr_checks.cc 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Copyright 2022 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "base/allocator/partition_allocator/dangling_raw_ptr_checks.h"
  5. #include "base/allocator/partition_allocator/partition_alloc_base/component_export.h"
  6. #include "base/allocator/partition_allocator/partition_alloc_check.h"
  7. namespace partition_alloc {
  8. namespace {
  9. DanglingRawPtrDetectedFn* g_dangling_raw_ptr_detected_fn = [](uintptr_t) {};
  10. DanglingRawPtrReleasedFn* g_dangling_raw_ptr_released_fn = [](uintptr_t) {};
  11. } // namespace
  12. DanglingRawPtrDetectedFn* GetDanglingRawPtrDetectedFn() {
  13. PA_DCHECK(g_dangling_raw_ptr_detected_fn);
  14. return g_dangling_raw_ptr_detected_fn;
  15. }
  16. DanglingRawPtrDetectedFn* GetDanglingRawPtrReleasedFn() {
  17. PA_DCHECK(g_dangling_raw_ptr_released_fn);
  18. return g_dangling_raw_ptr_released_fn;
  19. }
  20. void SetDanglingRawPtrDetectedFn(DanglingRawPtrDetectedFn fn) {
  21. PA_DCHECK(fn);
  22. g_dangling_raw_ptr_detected_fn = fn;
  23. }
  24. void SetDanglingRawPtrReleasedFn(DanglingRawPtrReleasedFn fn) {
  25. PA_DCHECK(fn);
  26. g_dangling_raw_ptr_released_fn = fn;
  27. }
  28. namespace internal {
  29. PA_COMPONENT_EXPORT(PARTITION_ALLOC) void DanglingRawPtrDetected(uintptr_t id) {
  30. g_dangling_raw_ptr_detected_fn(id);
  31. }
  32. PA_COMPONENT_EXPORT(PARTITION_ALLOC) void DanglingRawPtrReleased(uintptr_t id) {
  33. g_dangling_raw_ptr_released_fn(id);
  34. }
  35. } // namespace internal
  36. } // namespace partition_alloc