From 3881c4c77ed71a9fdb4ecde560dc1f8a16ed66a8 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 13 Jan 2022 14:05:00 +0800 Subject: [PATCH] Add SrsAutoFreeH to release ptr with hooks. (#2880). v4.0.226 --- trunk/doc/CHANGELOG.md | 4 +++- trunk/src/core/srs_core_autofree.hpp | 18 ++++++++++++++---- trunk/src/core/srs_core_version4.hpp | 2 +- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/trunk/doc/CHANGELOG.md b/trunk/doc/CHANGELOG.md index a2436754f..1d13b8e55 100644 --- a/trunk/doc/CHANGELOG.md +++ b/trunk/doc/CHANGELOG.md @@ -8,7 +8,9 @@ The changelog for SRS. ## SRS 4.0 Changelog -* v4.0, 2022-01-14, Support api_port to specify the WebRTC API port. v4.0.224 +* v4.0, 2022-01-13, For [#2880](https://github.com/ossrs/srs/pull/2880): Add SrsAutoFreeH to release ptr with hooks. (#2880). v4.0.226 +* v4.0, 2022-01-13, Support api_port to specify the WebRTC API port. v4.0.226 +* v4.0, 2022-01-13, Support api_port to specify the WebRTC API port. v4.0.224 * v4.0, 2022-01-13, Merge [#2873](https://github.com/ossrs/srs/pull/2873): LiveSource: Refine fetch for external exposed interface. (#2873). v4.0.223 * v4.0, 2022-01-13, Add conf/lighthouse.conf for LightHouse. v4.0.222 * v4.0, 2022-01-12, Refine the running homepage. v4.0.221 diff --git a/trunk/src/core/srs_core_autofree.hpp b/trunk/src/core/srs_core_autofree.hpp index 2212074b8..2159cfe4c 100644 --- a/trunk/src/core/srs_core_autofree.hpp +++ b/trunk/src/core/srs_core_autofree.hpp @@ -30,13 +30,16 @@ // where the char* pstr = new char[size]. // To delete object. #define SrsAutoFree(className, instance) \ - impl_SrsAutoFree _auto_free_##instance(&instance, false, false) + impl_SrsAutoFree _auto_free_##instance(&instance, false, false, NULL) // To delete array. #define SrsAutoFreeA(className, instance) \ - impl_SrsAutoFree _auto_free_array_##instance(&instance, true, false) + impl_SrsAutoFree _auto_free_array_##instance(&instance, true, false, NULL) // Use free instead of delete. #define SrsAutoFreeF(className, instance) \ - impl_SrsAutoFree _auto_free_##instance(&instance, false, true) + impl_SrsAutoFree _auto_free_##instance(&instance, false, true, NULL) +// Use hook instead of delete. +#define SrsAutoFreeH(className, instance, hook) \ + impl_SrsAutoFree _auto_free_##instance(&instance, false, false, hook) // The template implementation. template class impl_SrsAutoFree @@ -45,11 +48,16 @@ private: T** ptr; bool is_array; bool _use_free; + void (*_hook)(T*); public: - impl_SrsAutoFree(T** p, bool array, bool use_free) { + // If use_free, use free(void*) to release the p. + // If specified hook, use hook(p) to release it. + // Use delete to release p, or delete[] if p is an array. + impl_SrsAutoFree(T** p, bool array, bool use_free, void (*hook)(T*)) { ptr = p; is_array = array; _use_free = use_free; + _hook = hook; } virtual ~impl_SrsAutoFree() { @@ -59,6 +67,8 @@ public: if (_use_free) { free(*ptr); + } else if (_hook) { + _hook(*ptr); } else { if (is_array) { delete[] *ptr; diff --git a/trunk/src/core/srs_core_version4.hpp b/trunk/src/core/srs_core_version4.hpp index 0999c7ba2..32ef05add 100644 --- a/trunk/src/core/srs_core_version4.hpp +++ b/trunk/src/core/srs_core_version4.hpp @@ -9,6 +9,6 @@ #define VERSION_MAJOR 4 #define VERSION_MINOR 0 -#define VERSION_REVISION 225 +#define VERSION_REVISION 226 #endif