From 3a25935f7d0109aa63da14589790bd695fd1164c Mon Sep 17 00:00:00 2001
From: Mark Michelson <mmichelson@digium.com>
Date: Fri, 7 Dec 2012 19:05:30 +0000
Subject: [PATCH] Fix infinite looping and crash problem.

MALLOC_DEBUG is complaining about corrupted memory on taskprocessor
listeners, but I'm not seeing it, nor is valgrind. Not sure what's up
there.



git-svn-id: https://origsvn.digium.com/svn/asterisk/team/mmichelson/threadpool@377377 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 main/taskprocessor.c | 7 +------
 main/threadpool.c    | 2 +-
 2 files changed, 2 insertions(+), 7 deletions(-)

diff --git a/main/taskprocessor.c b/main/taskprocessor.c
index 80875ec4af..1a768de2f7 100644
--- a/main/taskprocessor.c
+++ b/main/taskprocessor.c
@@ -581,8 +581,6 @@ struct ast_taskprocessor *ast_taskprocessor_create_with_listener(const char *nam
 /* decrement the taskprocessor reference count and unlink from the container if necessary */
 void *ast_taskprocessor_unreference(struct ast_taskprocessor *tps)
 {
-	struct ast_taskprocessor_listener *listener;
-
 	if (!tps) {
 		return NULL;
 	}
@@ -596,10 +594,7 @@ void *ast_taskprocessor_unreference(struct ast_taskprocessor *tps)
 	 * 3. The listener
 	 */
 	ao2_unlink(tps_singletons, tps);
-	listener = tps->listener;
-	tps->listener = NULL;
-	listener_shutdown(listener);
-	ao2_ref(listener, -1);
+	listener_shutdown(tps->listener);
 	return NULL;
 }
 
diff --git a/main/threadpool.c b/main/threadpool.c
index 1b04779261..5ed9a42d13 100644
--- a/main/threadpool.c
+++ b/main/threadpool.c
@@ -784,7 +784,7 @@ static void worker_active(struct worker_thread *worker)
 {
 	int alive = 1;
 	while (alive) {
-		if (threadpool_execute(worker->pool)) {
+		if (threadpool_execute(worker->pool) == 0) {
 			alive = worker_idle(worker);
 		}
 	}
-- 
GitLab