]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Solve the issue about the "CHANGE THIS" and "XXX CHANGE THIS XXX" taskprocessor names.
authorMark Michelson <mmichelson@digium.com>
Mon, 10 Dec 2012 20:14:23 +0000 (20:14 +0000)
committerMark Michelson <mmichelson@digium.com>
Mon, 10 Dec 2012 20:14:23 +0000 (20:14 +0000)
Unfortunately, this required a taskprocessor listener change that makes listener allocation
utterly silly. I'm going to change the scheme so that allocation of taskprocessor listeners
is done internally within taskprocessor code. This will make it parallel with threadpool
code, which is a good thing.

git-svn-id: https://origsvn.digium.com/svn/asterisk/team/mmichelson/threadpool@377687 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/threadpool.h
main/taskprocessor.c
main/threadpool.c
tests/test_threadpool.c

index 3f3634129e1ea1032538fbc1215c1857d821db5f..9834d91805b0746f80fa7465218358d3515d0570 100644 (file)
@@ -113,12 +113,14 @@ struct ast_threadpool_listener *ast_threadpool_listener_alloc(
  * This function creates a threadpool. Tasks may be pushed onto this thread pool
  * in and will be automatically acted upon by threads within the pool.
  *
+ * \param name The name for the threadpool
  * \param listener The listener the threadpool will notify of changes
  * \param initial_size The number of threads for the pool to start with
  * \retval NULL Failed to create the threadpool
  * \retval non-NULL The newly-created threadpool
  */
-struct ast_threadpool *ast_threadpool_create(struct ast_threadpool_listener *listener,
+struct ast_threadpool *ast_threadpool_create(const char *name,
+               struct ast_threadpool_listener *listener,
                int initial_size, const struct ast_threadpool_options *options);
 
 /*!
index fc183b40969fe1f33b4b92e009293bbb44329759..a1e54a3b4e8ff2a8708cbe5bbbb44e9a7f556b11 100644 (file)
@@ -485,10 +485,6 @@ struct ast_taskprocessor_listener *ast_taskprocessor_listener_alloc(const struct
                return NULL;
        }
        listener->callbacks = callbacks;
-       listener->private_data = listener->callbacks->alloc(listener);
-       if (!listener->private_data) {
-               return NULL;
-       }
 
        ao2_ref(listener, +1);
        return listener;
@@ -559,6 +555,11 @@ struct ast_taskprocessor *ast_taskprocessor_create_with_listener(const char *nam
        ao2_ref(p, +1);
        listener->tps = p;
 
+       listener->private_data = listener->callbacks->alloc(listener);
+       if (!listener->private_data) {
+               return NULL;
+       }
+
        if (!(ao2_link(tps_singletons, p))) {
                ast_log(LOG_ERROR, "Failed to add taskprocessor '%s' to container\n", p->name);
                return NULL;
index 18c1349ae5894767ce1c270e7e618813dbe9a000..ee60dc7e3075be6b48e728ba6aa61a030ba2a606 100644 (file)
@@ -349,8 +349,15 @@ static void *threadpool_alloc(struct ast_taskprocessor_listener *listener)
 {
        RAII_VAR(struct ast_threadpool *, pool,
                        ao2_alloc(sizeof(*pool), threadpool_destructor), ao2_cleanup);
+       struct ast_str *name = ast_str_create(64);
 
-       pool->control_tps = ast_taskprocessor_get("CHANGE THIS", TPS_REF_DEFAULT);
+       if (!name) {
+               return NULL;
+       }
+
+       ast_str_set(&name, 0, "%s-control", ast_taskprocessor_name(listener->tps));
+
+       pool->control_tps = ast_taskprocessor_get(ast_str_buffer(name), TPS_REF_DEFAULT);
        if (!pool->control_tps) {
                return NULL;
        }
@@ -782,7 +789,8 @@ struct pool_options_pair {
        struct ast_threadpool_options options;
 };
 
-struct ast_threadpool *ast_threadpool_create(struct ast_threadpool_listener *listener,
+struct ast_threadpool *ast_threadpool_create(const char *name,
+               struct ast_threadpool_listener *listener,
                int initial_size, const struct ast_threadpool_options *options)
 {
        struct ast_threadpool *pool;
@@ -795,7 +803,7 @@ struct ast_threadpool *ast_threadpool_create(struct ast_threadpool_listener *lis
                return NULL;
        }
 
-       tps = ast_taskprocessor_create_with_listener("XXX CHANGE THIS XXX", tps_listener);
+       tps = ast_taskprocessor_create_with_listener(name, tps_listener);
 
        if (!tps) {
                return NULL;
index 23fee0fda4f2542aa3ae537c301eb2cb63cfaee2..4fe63e222935fce9e7b73b0ca1e26b25b0bcad6f 100644 (file)
@@ -287,7 +287,7 @@ AST_TEST_DEFINE(threadpool_push)
 
        switch (cmd) {
        case TEST_INIT:
-               info->name = "threadpool_push";
+               info->name = "push";
                info->category = "/main/threadpool/";
                info->summary = "Test task";
                info->description =
@@ -302,7 +302,7 @@ AST_TEST_DEFINE(threadpool_push)
                return AST_TEST_FAIL;
        }
 
-       pool = ast_threadpool_create(listener, 0, &options);
+       pool = ast_threadpool_create(info->name, listener, 0, &options);
        if (!pool) {
                goto end;
        }
@@ -340,7 +340,7 @@ AST_TEST_DEFINE(threadpool_thread_creation)
 
        switch (cmd) {
        case TEST_INIT:
-               info->name = "threadpool_thread_creation";
+               info->name = "thread_creation";
                info->category = "/main/threadpool/";
                info->summary = "Test threadpool thread creation";
                info->description =
@@ -356,7 +356,7 @@ AST_TEST_DEFINE(threadpool_thread_creation)
        }
        tld = listener->private_data;
 
-       pool = ast_threadpool_create(listener, 0, &options);
+       pool = ast_threadpool_create(info->name, listener, 0, &options);
        if (!pool) {
                goto end;
        }
@@ -389,7 +389,7 @@ AST_TEST_DEFINE(threadpool_thread_destruction)
 
        switch (cmd) {
        case TEST_INIT:
-               info->name = "threadpool_thread_destruction";
+               info->name = "thread_destruction";
                info->category = "/main/threadpool/";
                info->summary = "Test threadpool thread destruction";
                info->description =
@@ -405,7 +405,7 @@ AST_TEST_DEFINE(threadpool_thread_destruction)
        }
        tld = listener->private_data;
 
-       pool = ast_threadpool_create(listener, 0, &options);
+       pool = ast_threadpool_create(info->name, listener, 0, &options);
        if (!pool) {
                goto end;
        }
@@ -447,7 +447,7 @@ AST_TEST_DEFINE(threadpool_thread_timeout)
 
        switch (cmd) {
        case TEST_INIT:
-               info->name = "threadpool_thread_timeout";
+               info->name = "thread_timeout";
                info->category = "/main/threadpool/";
                info->summary = "Test threadpool thread timeout";
                info->description =
@@ -463,7 +463,7 @@ AST_TEST_DEFINE(threadpool_thread_timeout)
        }
        tld = listener->private_data;
 
-       pool = ast_threadpool_create(listener, 0, &options);
+       pool = ast_threadpool_create(info->name, listener, 0, &options);
        if (!pool) {
                goto end;
        }
@@ -509,7 +509,7 @@ AST_TEST_DEFINE(threadpool_one_task_one_thread)
 
        switch (cmd) {
        case TEST_INIT:
-               info->name = "threadpool_one_task_one_thread";
+               info->name = "one_task_one_thread";
                info->category = "/main/threadpool/";
                info->summary = "Test a single task with a single thread";
                info->description =
@@ -525,7 +525,7 @@ AST_TEST_DEFINE(threadpool_one_task_one_thread)
        }
        tld = listener->private_data;
 
-       pool = ast_threadpool_create(listener, 0, &options);
+       pool = ast_threadpool_create(info->name, listener, 0, &options);
        if (!pool) {
                goto end;
        }
@@ -585,7 +585,7 @@ AST_TEST_DEFINE(threadpool_one_thread_one_task)
 
        switch (cmd) {
        case TEST_INIT:
-               info->name = "threadpool_one_thread_one_task";
+               info->name = "one_thread_one_task";
                info->category = "/main/threadpool/";
                info->summary = "Test a single thread with a single task";
                info->description =
@@ -601,7 +601,7 @@ AST_TEST_DEFINE(threadpool_one_thread_one_task)
        }
        tld = listener->private_data;
 
-       pool = ast_threadpool_create(listener, 0, &options);
+       pool = ast_threadpool_create(info->name, listener, 0, &options);
        if (!pool) {
                goto end;
        }
@@ -664,7 +664,7 @@ AST_TEST_DEFINE(threadpool_one_thread_multiple_tasks)
 
        switch (cmd) {
        case TEST_INIT:
-               info->name = "threadpool_one_thread_multiple_tasks";
+               info->name = "one_thread_multiple_tasks";
                info->category = "/main/threadpool/";
                info->summary = "Test a single thread with multiple tasks";
                info->description =
@@ -680,7 +680,7 @@ AST_TEST_DEFINE(threadpool_one_thread_multiple_tasks)
        }
        tld = listener->private_data;
 
-       pool = ast_threadpool_create(listener, 0, &options);
+       pool = ast_threadpool_create(info->name, listener, 0, &options);
        if (!pool) {
                goto end;
        }
@@ -755,7 +755,7 @@ AST_TEST_DEFINE(threadpool_reactivation)
 
        switch (cmd) {
        case TEST_INIT:
-               info->name = "threadpool_reactivation";
+               info->name = "reactivation";
                info->category = "/main/threadpool/";
                info->summary = "Test that a threadpool reactivates when work is added";
                info->description =
@@ -773,7 +773,7 @@ AST_TEST_DEFINE(threadpool_reactivation)
        }
        tld = listener->private_data;
 
-       pool = ast_threadpool_create(listener, 0, &options);
+       pool = ast_threadpool_create(info->name, listener, 0, &options);
        if (!pool) {
                goto end;
        }
@@ -917,7 +917,7 @@ AST_TEST_DEFINE(threadpool_task_distribution)
 
        switch (cmd) {
        case TEST_INIT:
-               info->name = "threadpool_task_distribution";
+               info->name = "task_distribution";
                info->category = "/main/threadpool/";
                info->summary = "Test that tasks are evenly distributed to threads";
                info->description =
@@ -934,7 +934,7 @@ AST_TEST_DEFINE(threadpool_task_distribution)
        }
        tld = listener->private_data;
 
-       pool = ast_threadpool_create(listener, 0, &options);
+       pool = ast_threadpool_create(info->name, listener, 0, &options);
        if (!pool) {
                goto end;
        }
@@ -1005,7 +1005,7 @@ AST_TEST_DEFINE(threadpool_more_destruction)
 
        switch (cmd) {
        case TEST_INIT:
-               info->name = "threadpool_more_destruction";
+               info->name = "more_destruction";
                info->category = "/main/threadpool/";
                info->summary = "Test that threads are destroyed as expected";
                info->description =
@@ -1024,7 +1024,7 @@ AST_TEST_DEFINE(threadpool_more_destruction)
        }
        tld = listener->private_data;
 
-       pool = ast_threadpool_create(listener, 0, &options);
+       pool = ast_threadpool_create(info->name, listener, 0, &options);
        if (!pool) {
                goto end;
        }