[asterisk-commits] mmichelson: branch mmichelson/threadpool r377805 - in /team/mmichelson/thread...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Dec 11 10:53:20 CST 2012


Author: mmichelson
Date: Tue Dec 11 10:53:16 2012
New Revision: 377805

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=377805
Log:
Some general cleanup, plus we now send state changes when threads activate.

This is now ready for review board, imo!


Modified:
    team/mmichelson/threadpool/include/asterisk/threadpool.h
    team/mmichelson/threadpool/main/threadpool.c

Modified: team/mmichelson/threadpool/include/asterisk/threadpool.h
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/threadpool/include/asterisk/threadpool.h?view=diff&rev=377805&r1=377804&r2=377805
==============================================================================
--- team/mmichelson/threadpool/include/asterisk/threadpool.h (original)
+++ team/mmichelson/threadpool/include/asterisk/threadpool.h Tue Dec 11 10:53:16 2012
@@ -89,7 +89,7 @@
 	/*!
 	 * \brief Time limit in seconds for idle threads
 	 *
-	 * A time of 0 or less will mean an infinite timeout.
+	 * A time of 0 or less will mean no timeout.
 	 */
 	int idle_timeout;
 	/*!

Modified: team/mmichelson/threadpool/main/threadpool.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/threadpool/main/threadpool.c?view=diff&rev=377805&r1=377804&r2=377805
==============================================================================
--- team/mmichelson/threadpool/main/threadpool.c (original)
+++ team/mmichelson/threadpool/main/threadpool.c Tue Dec 11 10:53:16 2012
@@ -435,7 +435,28 @@
 	return CMP_MATCH;
 }
 
-static void grow(struct ast_threadpool *pool, int delta);
+/*!
+ * \brief Add threads to the threadpool
+ *
+ * This function is called from the threadpool's control taskprocessor thread.
+ * \param pool The pool that is expanding
+ * \delta The number of threads to add to the pool
+ */
+static void grow(struct ast_threadpool *pool, int delta)
+{
+	int i;
+
+	ast_debug(1, "Going to increase threadpool size by %d\n", delta);
+
+	for (i = 0; i < delta; ++i) {
+		struct worker_thread *worker = worker_thread_alloc(pool);
+		if (!worker) {
+			return;
+		}
+		ao2_link(pool->active_threads, worker);
+		ao2_ref(worker, -1);
+	}
+}
 
 /*!
  * \brief Queued task called when tasks are pushed into the threadpool
@@ -451,15 +472,22 @@
 	struct task_pushed_data *tpd = data;
 	struct ast_threadpool *pool = tpd->pool;
 	int was_empty = tpd->was_empty;
+	int state_changed;
 
 	pool->listener->callbacks->task_pushed(pool, pool->listener, was_empty);
-	if (ao2_container_count(pool->idle_threads) == 0 && pool->options.auto_increment > 0) {
-		grow(pool, pool->options.auto_increment);
+	if (ao2_container_count(pool->idle_threads) == 0) {
+		if (pool->options.auto_increment > 0) {
+			grow(pool, pool->options.auto_increment);
+			state_changed = 1;
+		}
 	} else {
 		ao2_callback(pool->idle_threads, OBJ_UNLINK | OBJ_NOLOCK | OBJ_NODATA,
 				activate_thread, pool);
-	}	
-	threadpool_send_state_changed(pool);
+		state_changed = 1;
+	}
+	if (state_changed) {
+		threadpool_send_state_changed(pool);
+	}
 	ao2_ref(tpd, -1);
 	return 0;
 }
@@ -572,29 +600,6 @@
 };
 
 /*!
- * \brief Add threads to the threadpool
- *
- * This function is called from the threadpool's control taskprocessor thread.
- * \param pool The pool that is expanding
- * \delta The number of threads to add to the pool
- */
-static void grow(struct ast_threadpool *pool, int delta)
-{
-	int i;
-
-	ast_debug(1, "Going to increase threadpool size by %d\n", delta);
-
-	for (i = 0; i < delta; ++i) {
-		struct worker_thread *worker = worker_thread_alloc(pool);
-		if (!worker) {
-			return;
-		}
-		ao2_link(pool->active_threads, worker);
-		ao2_ref(worker, -1);
-	}
-}
-
-/*!
  * \brief ao2 callback to kill a set number of threads.
  *
  * Threads will be unlinked from the container as long as the
@@ -680,7 +685,7 @@
 	ao2_callback(pool->idle_threads, OBJ_UNLINK | OBJ_NOLOCK | OBJ_NODATA | OBJ_MULTIPLE,
 			kill_threads, &idle_threads_to_kill);
 
-	ast_debug(1, "Goign to kill off %d active threads\n", active_threads_to_zombify);
+	ast_debug(1, "Going to kill off %d active threads\n", active_threads_to_zombify);
 
 	ao2_callback_data(pool->active_threads, OBJ_UNLINK | OBJ_NOLOCK | OBJ_NODATA | OBJ_MULTIPLE,
 			zombify_threads, pool, &active_threads_to_zombify);




More information about the asterisk-commits mailing list