]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-dict: dict-lua - Don't yield again until previous one has completed
authorAki Tuomi <aki.tuomi@open-xchange.com>
Thu, 6 May 2021 18:25:54 +0000 (21:25 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Mon, 10 May 2021 10:22:33 +0000 (10:22 +0000)
src/lib-dict/dict-iter-lua.c

index 2e8d77ae7915734cb24897f41eb2dc3501108fae..6ab1c20e844272ad908d79b14abbaf3d92bb3868 100644 (file)
@@ -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);
 }