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