]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Enhance the isc_loop unit to allow reference count tracking
authorOndřej Surý <ondrej@isc.org>
Mon, 2 Jan 2023 12:26:41 +0000 (13:26 +0100)
committerOndřej Surý <ondrej@isc.org>
Thu, 5 Jan 2023 12:33:15 +0000 (12:33 +0000)
Use ISC_REFCOUNT_TRACE_{IMPL,DECL} to allow better isc_loop reference
tracking - use `#define ISC_LOOP_TRACE 1` in <isc/loop.h> to enable.

lib/isc/include/isc/loop.h
lib/isc/loop.c

index 436392aa41622a7dcb5fefad857cd9c3b1301b8d..2706f6e6c8deb32315f91c055c3892a9166dd353 100644 (file)
@@ -22,6 +22,8 @@
 
 typedef void (*isc_job_cb)(void *);
 
+#undef ISC_LOOP_TRACE
+
 ISC_LANG_BEGINDECLS
 
 void
@@ -169,7 +171,19 @@ isc_loop_get(isc_loopmgr_t *loopmgr, uint32_t tid);
  *\li   'tid' is smaller than number of initialized loops
  */
 
+#
+
+#if ISC_LOOP_TRACE
+#define isc_loop_ref(ptr)   isc_loop__ref(ptr, __func__, __FILE__, __LINE__)
+#define isc_loop_unref(ptr) isc_loop__unref(ptr, __func__, __FILE__, __LINE__)
+#define isc_loop_attach(ptr, ptrp) \
+       isc_loop__attach(ptr, ptrp, __func__, __FILE__, __LINE__)
+#define isc_loop_detach(ptrp) \
+       isc_loop__detach(ptrp, __func__, __FILE__, __LINE__)
+ISC_REFCOUNT_TRACE_DECL(isc_loop);
+#else
 ISC_REFCOUNT_DECL(isc_loop);
+#endif
 /*%<
  * Reference counting functions for isc_loop
  */
index 0ab71a0543f4ed9ca4f4401f893554406e8f2a1a..3ec2c6ba527081dc361785d39de8c58826362329 100644 (file)
@@ -330,7 +330,11 @@ loop_destroy(isc_loop_t *loop) {
        UV_RUNTIME_CHECK(uv_async_send, r);
 }
 
+#if ISC_LOOP_TRACE
+ISC_REFCOUNT_TRACE_IMPL(isc_loop, loop_destroy)
+#else
 ISC_REFCOUNT_IMPL(isc_loop, loop_destroy);
+#endif
 
 void
 isc_loopmgr_create(isc_mem_t *mctx, uint32_t nloops, isc_loopmgr_t **loopmgrp) {