summaryrefslogtreecommitdiff
path: root/main/astobj2.c
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2017-01-10 17:37:38 -0600
committerRichard Mudgett <rmudgett@digium.com>2017-01-24 14:17:05 -0600
commit930a24a7304d2c7f1a921bd1686cf40774a60307 (patch)
treee7f8b22d81a318c2d1093b62ca7f139fd180d071 /main/astobj2.c
parentf517c015e244f54a94a10b419163425c8131d497 (diff)
astobj2.c: Add excessive ref count trap.
Change-Id: I32e6a589cf9009450e4ff7cb85c07c9d9ef7fe4a
Diffstat (limited to 'main/astobj2.c')
-rw-r--r--main/astobj2.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/main/astobj2.c b/main/astobj2.c
index c8e48bbf5..1529e91b0 100644
--- a/main/astobj2.c
+++ b/main/astobj2.c
@@ -524,6 +524,20 @@ int __ao2_ref(void *user_data, int delta,
if (0 < current_value) {
/* The object still lives. */
+#define EXCESSIVE_REF_COUNT 100000
+
+ if (EXCESSIVE_REF_COUNT <= current_value && ret < EXCESSIVE_REF_COUNT) {
+ char excessive_ref_buf[100];
+
+ /* We just reached or went over the excessive ref count trigger */
+ snprintf(excessive_ref_buf, sizeof(excessive_ref_buf),
+ "Excessive refcount %d reached on ao2 object %p",
+ current_value, user_data);
+ ast_log(__LOG_ERROR, file, line, func, "%s\n", excessive_ref_buf);
+
+ __ast_assert_failed(0, excessive_ref_buf, file, line, func);
+ }
+
if (ref_log && tag) {
fprintf(ref_log, "%p,%s%d,%d,%s,%d,%s,%d,%s\n", user_data,
(delta < 0 ? "" : "+"), delta, ast_get_tid(),