From c3150d821f9fe404c7836d6aa4e5047a450b29fa Mon Sep 17 00:00:00 2001
From: Matthias Schiffer <mschiffer@universe-factory.net>
Date: Fri, 18 Dec 2015 17:44:16 +0100
Subject: [PATCH] gluon-announce{,d}: create a new UCI cursor for each run

---
 .../files/usr/lib/lua/gluon/announce.lua      | 19 ++++++++++++++++++-
 .../files/usr/lib/lua/gluon/announced.lua     |  2 +-
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/package/gluon-announce/files/usr/lib/lua/gluon/announce.lua b/package/gluon-announce/files/usr/lib/lua/gluon/announce.lua
index 29a1f8172..0e336ad5f 100644
--- a/package/gluon-announce/files/usr/lib/lua/gluon/announce.lua
+++ b/package/gluon-announce/files/usr/lib/lua/gluon/announce.lua
@@ -3,8 +3,11 @@
 module('gluon.announce', package.seeall)
 
 fs = require 'nixio.fs'
-uci = require('luci.model.uci').cursor()
 util = require 'gluon.util'
+model_uci = require 'luci.model.uci'
+
+
+local collect_dir
 
 local function collect_entry(entry)
 	if fs.stat(entry, 'type') == 'dir' then
@@ -49,3 +52,17 @@ function collect_dir(dir)
 		return ret
 	end
 end
+
+function collect(dir)
+	local f = collect_dir(dir)
+
+	return function ()
+		_M.uci = model_uci.cursor()
+		ret = f()
+		_M.uci = nil
+
+		collectgarbage()
+
+		return ret
+	end
+end
diff --git a/package/gluon-announced/files/usr/lib/lua/gluon/announced.lua b/package/gluon-announced/files/usr/lib/lua/gluon/announced.lua
index 7c43a523d..2dfe005c3 100644
--- a/package/gluon-announced/files/usr/lib/lua/gluon/announced.lua
+++ b/package/gluon-announced/files/usr/lib/lua/gluon/announced.lua
@@ -12,7 +12,7 @@ nixio.chdir('/lib/gluon/announce/')
 for dir in fs.glob('*.d') do
   local name = dir:sub(1, -3)
   memoize[name] = {
-    collect = announce.collect_dir(dir),
+    collect = announce.collect(dir),
     -- tonumber will return 0 for invalid inputs
     cache_time = tonumber(util.trim(fs.readfile(name .. '.cache') or ''))
   }
-- 
GitLab