From: Aki Tuomi Date: Thu, 6 May 2021 18:25:54 +0000 (+0300) Subject: lib-dict: dict-lua - Don't yield again until previous one has completed X-Git-Tag: 2.3.16~169 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=79a2edcd078d5345f61a4070ff4bfbbda35196c3;p=thirdparty%2Fdovecot%2Fcore.git lib-dict: dict-lua - Don't yield again until previous one has completed --- diff --git a/src/lib-dict/dict-iter-lua.c b/src/lib-dict/dict-iter-lua.c index 2e8d77ae79..6ab1c20e84 100644 --- a/src/lib-dict/dict-iter-lua.c +++ b/src/lib-dict/dict-iter-lua.c @@ -14,6 +14,7 @@ struct lua_dict_iter { int error_ref; lua_State *L; + bool yielded:1; }; static void lua_dict_iter_unref(struct lua_dict_iter *iter) @@ -58,6 +59,7 @@ static int lua_dict_iterate_step(lua_State *L) DLUA_REQUIRE_ARGS(L, 2); iter = xlua_dict_iter_getptr(L, 1, NULL); + iter->yielded = FALSE; lua_dict_iterate_more(iter); @@ -132,6 +134,9 @@ static void lua_dict_iterate_more(struct lua_dict_iter *iter) /* dict iter callback */ static void lua_dict_iterate_callback(struct lua_dict_iter *iter) { + if (iter->yielded) + return; + iter->yielded = TRUE; dlua_pcall_yieldable_resume(iter->L, 1); }