From: Vsevolod Stakhov Date: Wed, 5 May 2021 10:37:43 +0000 (+0100) Subject: [Minor] Allow forced termination of the suspended threads X-Git-Tag: 3.0~438 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=aedcdfe854c351c7d441487a30d931acabc1ce82;p=thirdparty%2Frspamd.git [Minor] Allow forced termination of the suspended threads --- diff --git a/src/lua/lua_redis.c b/src/lua/lua_redis.c index b624fc43bf..057a21c958 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 01c55b4a9d..50c53698c7 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 66c8b991ce..2845d2f674 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 }