commit aedcdfe: [Minor] Allow forced termination of the suspended threads

Vsevolod Stakhov vsevolod at highsecure.ru
Wed May 5 10:42:04 UTC 2021


Author: Vsevolod Stakhov
Date: 2021-05-05 11:37:43 +0100
URL: https://github.com/rspamd/rspamd/commit/aedcdfe854c351c7d441487a30d931acabc1ce82 (HEAD -> master)

[Minor] Allow forced termination of the suspended threads

---
 src/lua/lua_redis.c       |  4 ++--
 src/lua/lua_thread_pool.c | 13 +++++++++----
 src/lua/lua_thread_pool.h |  4 ++--
 3 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/src/lua/lua_redis.c b/src/lua/lua_redis.c
index b624fc43b..057a21c95 100644
--- a/src/lua/lua_redis.c
+++ b/src/lua/lua_redis.c
@@ -685,8 +685,8 @@ lua_redis_callback_sync (redisAsyncContext *ac, gpointer r, gpointer priv)
 			}
 			else {
 				/* We cannot resume the thread as the associated task has gone */
-				lua_thread_pool_terminate_entry (ud->cfg->lua_thread_pool,
-						ctx->thread);
+				lua_thread_pool_terminate_entry_full (ud->cfg->lua_thread_pool,
+						ctx->thread, G_STRLOC, true);
 				ctx->thread = NULL;
 			}
 		}
diff --git a/src/lua/lua_thread_pool.c b/src/lua/lua_thread_pool.c
index 01c55b4a9..50c53698c 100644
--- a/src/lua/lua_thread_pool.c
+++ b/src/lua/lua_thread_pool.c
@@ -159,12 +159,17 @@ lua_thread_pool_return_full (struct lua_thread_pool *pool,
 
 void
 lua_thread_pool_terminate_entry_full (struct lua_thread_pool *pool,
-		struct thread_entry *thread_entry, const gchar *loc)
+									  struct thread_entry *thread_entry, const gchar *loc,
+									  bool enforce)
 {
 	struct thread_entry *ent = NULL;
 
-	/* we should only terminate failed threads */
-	g_assert (lua_status (thread_entry->lua_state) != 0 && lua_status (thread_entry->lua_state) != LUA_YIELD);
+
+	if (!enforce) {
+		/* we should only terminate failed threads */
+		g_assert (lua_status(thread_entry->lua_state) != 0 &&
+			lua_status(thread_entry->lua_state) != LUA_YIELD);
+	}
 
 	if (pool->running_entry == thread_entry) {
 		pool->running_entry = NULL;
@@ -327,7 +332,7 @@ lua_resume_thread_internal_full (struct thread_entry *thread_entry,
 			 * Maybe there is a way to recover here.
 			 * For now, just remove faulty thread
 			 */
-			lua_thread_pool_terminate_entry_full (pool, thread_entry, loc);
+			lua_thread_pool_terminate_entry_full (pool, thread_entry, loc, false);
 		}
 	}
 }
diff --git a/src/lua/lua_thread_pool.h b/src/lua/lua_thread_pool.h
index 66c8b991c..2845d2f67 100644
--- a/src/lua/lua_thread_pool.h
+++ b/src/lua/lua_thread_pool.h
@@ -192,9 +192,9 @@ lua_thread_resume_full (struct thread_entry *thread_entry,
 void
 lua_thread_pool_terminate_entry_full (struct lua_thread_pool *pool,
 								 struct thread_entry *thread_entry,
-								 const gchar *loc);
+								 const gchar *loc, bool enforce);
 #define lua_thread_pool_terminate_entry(pool, thread_entry) \
-    lua_thread_pool_terminate_entry_full (pool, thread_entry, G_STRLOC)
+    lua_thread_pool_terminate_entry_full (pool, thread_entry, G_STRLOC, false)
 
 #ifdef  __cplusplus
 }


More information about the Commits mailing list