[svn-commits] russell: branch 1.4 r82337 - in /branches/1.4: include/ main/
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Thu Sep 13 13:46:00 CDT 2007
Author: russell
Date: Thu Sep 13 13:45:59 2007
New Revision: 82337
URL: http://svn.digium.com/view/asterisk?view=rev&rev=82337
Log:
Only compile in tracking astobj2 statistics if dev-mode is enabled. Also, when
dev mode is enabled, register the CLI command that can be used to run the astobj2
test and print out statistics.
Modified:
branches/1.4/include/asterisk.h
branches/1.4/main/asterisk.c
branches/1.4/main/astobj2.c
Modified: branches/1.4/include/asterisk.h
URL: http://svn.digium.com/view/asterisk/branches/1.4/include/asterisk.h?view=diff&rev=82337&r1=82336&r2=82337
==============================================================================
--- branches/1.4/include/asterisk.h (original)
+++ branches/1.4/include/asterisk.h Thu Sep 13 13:45:59 2007
@@ -74,6 +74,7 @@
void dnsmgr_start_refresh(void); /*!< Provided by dnsmgr.c */
int dnsmgr_reload(void); /*!< Provided by dnsmgr.c */
void threadstorage_init(void); /*!< Provided by threadstorage.c */
+int astobj2_init(void); /*! Provided by astobj2.c */
/* Many headers need 'ast_channel' to be defined */
struct ast_channel;
Modified: branches/1.4/main/asterisk.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/main/asterisk.c?view=diff&rev=82337&r1=82336&r2=82337
==============================================================================
--- branches/1.4/main/asterisk.c (original)
+++ branches/1.4/main/asterisk.c Thu Sep 13 13:45:59 2007
@@ -2858,6 +2858,8 @@
threadstorage_init();
+ astobj2_init();
+
if (load_modules(1)) {
printf(term_quit());
exit(1);
Modified: branches/1.4/main/astobj2.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/main/astobj2.c?view=diff&rev=82337&r1=82336&r2=82337
==============================================================================
--- branches/1.4/main/astobj2.c (original)
+++ branches/1.4/main/astobj2.c Thu Sep 13 13:45:59 2007
@@ -57,6 +57,11 @@
void *user_data[0];
};
+#ifdef AST_DEVMODE
+#define AO2_DEBUG 1
+#endif
+
+#ifdef AO2_DEBUG
struct ao2_stats {
volatile int total_objects;
volatile int total_mem;
@@ -66,6 +71,7 @@
};
static struct ao2_stats ao2;
+#endif
#ifndef HAVE_BKTR /* backtrace support */
void ao2_bt(void) {}
@@ -126,7 +132,9 @@
if (p == NULL)
return -1;
+#ifdef AO2_DEBUG
ast_atomic_fetchadd_int(&ao2.total_locked, 1);
+#endif
return ast_mutex_lock(&p->priv_data.lock);
}
@@ -138,7 +146,9 @@
if (p == NULL)
return -1;
+#ifdef AO2_DEBUG
ast_atomic_fetchadd_int(&ao2.total_locked, -1);
+#endif
return ast_mutex_unlock(&p->priv_data.lock);
}
@@ -161,9 +171,12 @@
/* we modify with an atomic operation the reference counter */
ret = ast_atomic_fetchadd_int(&obj->priv_data.ref_counter, delta);
+ current_value = ret + delta;
+
+#ifdef AO2_DEBUG
ast_atomic_fetchadd_int(&ao2.total_refs, delta);
- current_value = ret + delta;
-
+#endif
+
/* this case must never happen */
if (current_value < 0)
ast_log(LOG_ERROR, "refcount %d on object %p\n", current_value, user_data);
@@ -173,13 +186,15 @@
obj->priv_data.destructor_fn(user_data);
ast_mutex_destroy(&obj->priv_data.lock);
+#ifdef AO2_DEBUG
ast_atomic_fetchadd_int(&ao2.total_mem, - obj->priv_data.data_size);
+ ast_atomic_fetchadd_int(&ao2.total_objects, -1);
+#endif
/* for safety, zero-out the astobj2 header and also the
* first word of the user-data, which we make sure is always
* allocated. */
bzero(obj, sizeof(struct astobj2 *) + sizeof(void *) );
free(obj);
- ast_atomic_fetchadd_int(&ao2.total_objects, -1);
}
return ret;
@@ -207,9 +222,12 @@
obj->priv_data.data_size = data_size;
obj->priv_data.ref_counter = 1;
obj->priv_data.destructor_fn = destructor_fn; /* can be NULL */
+
+#ifdef AO2_DEBUG
ast_atomic_fetchadd_int(&ao2.total_objects, 1);
ast_atomic_fetchadd_int(&ao2.total_mem, data_size);
ast_atomic_fetchadd_int(&ao2.total_refs, 1);
+#endif
/* return a pointer to the user data */
return EXTERNAL_OBJ(obj);
@@ -289,8 +307,11 @@
c->n_buckets = n_buckets;
c->hash_fn = hash_fn ? hash_fn : hash_zero;
c->cmp_fn = cmp_fn;
+
+#ifdef AO2_DEBUG
ast_atomic_fetchadd_int(&ao2.total_containers, 1);
-
+#endif
+
return c;
}
@@ -579,7 +600,10 @@
struct ao2_container *c = _c;
ao2_callback(c, OBJ_UNLINK, cd_cb, NULL);
+
+#ifdef AO2_DEBUG
ast_atomic_fetchadd_int(&ao2.total_containers, -1);
+#endif
}
static int print_cb(void *obj, void *arg, int flag)
@@ -591,6 +615,7 @@
return 0;
}
+#ifdef AO2_DEBUG
/*
* Print stats
*/
@@ -681,10 +706,13 @@
handle_astobj2_stats, "Print astobj2 statistics", },
{ { "astobj2", "test", NULL } , handle_astobj2_test, "Test astobj2", },
};
-
-int astobj2_init(void);
+#endif /* AO2_DEBUG */
+
int astobj2_init(void)
{
+#ifdef AO2_DEBUG
ast_cli_register_multiple(cli_astobj2, ARRAY_LEN(cli_astobj2));
+#endif
+
return 0;
}
More information about the svn-commits
mailing list