aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--channels/chan_sip.c10
-rw-r--r--include/asterisk/sched.h5
-rw-r--r--main/sched.c37
3 files changed, 24 insertions, 28 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index ef7c4e001..1fb775179 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -13821,7 +13821,7 @@ static char *sip_show_user(struct ast_cli_entry *e, int cmd, struct ast_cli_args
static char *sip_show_sched(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
- char cbuf[2256];
+ struct ast_str *cbuf;
struct ast_cb_names cbnames = {9, { "retrans_pkt",
"__sip_autodestruct",
"expire_register",
@@ -13851,9 +13851,13 @@ static char *sip_show_sched(struct ast_cli_entry *e, int cmd, struct ast_cli_arg
case CLI_GENERATE:
return NULL;
}
+
+ cbuf = ast_str_alloca(2048);
+
ast_cli(a->fd, "\n");
- ast_sched_report(sched, cbuf, sizeof(cbuf), &cbnames);
- ast_cli(a->fd, "%s", cbuf);
+ ast_sched_report(sched, &cbuf, &cbnames);
+ ast_cli(a->fd, "%s", cbuf->str);
+
return CLI_SUCCESS;
}
diff --git a/include/asterisk/sched.h b/include/asterisk/sched.h
index ab328af95..ae1592553 100644
--- a/include/asterisk/sched.h
+++ b/include/asterisk/sched.h
@@ -145,13 +145,12 @@ void sched_context_destroy(struct sched_context *c);
typedef int (*ast_sched_cb)(const void *data);
#define AST_SCHED_CB(a) ((ast_sched_cb)(a))
-struct ast_cb_names
-{
+struct ast_cb_names {
int numassocs;
char *list[10];
ast_sched_cb cblist[10];
};
-char *ast_sched_report(struct sched_context *con, char *buf, int bufsiz, struct ast_cb_names *cbnames);
+void ast_sched_report(struct sched_context *con, struct ast_str **buf, struct ast_cb_names *cbnames);
/*! \brief Adds a scheduled event
* Schedule an event to take place at some point in the future. callback
diff --git a/main/sched.c b/main/sched.c
index d62ca115e..55823cb0e 100644
--- a/main/sched.c
+++ b/main/sched.c
@@ -386,41 +386,34 @@ int _ast_sched_del(struct sched_context *con, int id, const char *file, int line
return 0;
}
-
-char *ast_sched_report(struct sched_context *con, char *buf, int bufsiz, struct ast_cb_names *cbnames)
+void ast_sched_report(struct sched_context *con, struct ast_str **buf, struct ast_cb_names *cbnames)
{
- int *countlist,i;
+ int i;
struct sched *cur;
- char buf2[1200];
- ast_sched_cb xxx = NULL;
-
- buf[0] = 0;
- sprintf(buf, " Highwater = %d\n schedcnt = %d\n", con->highwater, con->schedcnt);
- countlist = ast_calloc(sizeof(int),cbnames->numassocs+1);
+ int countlist[cbnames->numassocs + 1];
+ ast_str_set(buf, 0, " Highwater = %d\n schedcnt = %d\n", con->highwater, con->schedcnt);
+
AST_DLLIST_TRAVERSE(&con->schedq, cur, list) {
/* match the callback to the cblist */
- for (i=0;i<cbnames->numassocs;i++) {
- if (cur->callback == cbnames->cblist[i])
+ for (i = 0; i < cbnames->numassocs; i++) {
+ if (cur->callback == cbnames->cblist[i]) {
break;
+ }
}
- if (i < cbnames->numassocs)
+ if (i < cbnames->numassocs) {
countlist[i]++;
- else {
- xxx = cur->callback;
+ } else {
countlist[cbnames->numassocs]++;
}
}
- for (i=0;i<cbnames->numassocs;i++) {
- sprintf(buf2," %s : %d\n", cbnames->list[i], countlist[i]);
- strcat(buf, buf2);
- }
- sprintf(buf2," <unknown:%p> : %d\n", xxx, countlist[cbnames->numassocs]);
- strcat( buf, buf2);
- return buf;
-}
+ for (i = 0; i < cbnames->numassocs; i++) {
+ ast_str_append(buf, 0, " %s : %d\n", cbnames->list[i], countlist[i]);
+ }
+ ast_str_append(buf, 0, " <unknown> : %d\n", countlist[cbnames->numassocs]);
+}
/*! \brief Dump the contents of the scheduler to LOG_DEBUG */
void ast_sched_dump(const struct sched_context *con)