From 8e09abf1200580029950530820b89da033b9411d Mon Sep 17 00:00:00 2001
From: Marko Lindqvist <cazfi74@gmail.com>
Date: Tue, 24 Jun 2025 01:14:31 +0300
Subject: [PATCH 86/86] Apply patch 1 for lua-5.4.8

See RM #1537

Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
---
 dependencies/lua-5.4/Version.txt | 2 +-
 dependencies/lua-5.4/src/lgc.c   | 8 ++++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/dependencies/lua-5.4/Version.txt b/dependencies/lua-5.4/Version.txt
index d61b859e28..156106d6b2 100644
--- a/dependencies/lua-5.4/Version.txt
+++ b/dependencies/lua-5.4/Version.txt
@@ -2,7 +2,7 @@ Sources here are from lua-5.4.8
 (http://www.lua.org/ftp/lua-5.4.8.tar.gz)
 
 Upstream bug fixes from https://www.lua.org/bugs.html applied:
-
+1
 
 Not entire lua distribution directory hierarchy is included here, and
 some files needed for Freeciv usage have been added.
diff --git a/dependencies/lua-5.4/src/lgc.c b/dependencies/lua-5.4/src/lgc.c
index 5817f9eec3..c01660abc5 100644
--- a/dependencies/lua-5.4/src/lgc.c
+++ b/dependencies/lua-5.4/src/lgc.c
@@ -553,8 +553,12 @@ static lu_mem traversetable (global_State *g, Table *h) {
       traverseweakvalue(g, h);
     else if (!weakvalue)  /* strong values? */
       traverseephemeron(g, h, 0);
-    else  /* all weak */
-      linkgclist(h, g->allweak);  /* nothing to traverse now */
+    else {  /* all weak */
+      if (g->gcstate == GCSpropagate)
+        linkgclist(h, g->grayagain);  /* must visit again its metatable */
+      else
+        linkgclist(h, g->allweak);  /* must clear collected entries */
+    }
   }
   else  /* not weak */
     traversestrongtable(g, h);
-- 
2.47.2

