From f7558a676130c04eb85b454a811f41959fe578a5 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Sat, 3 Dec 2016 23:15:42 -0500 Subject: [PATCH] Wbase: Add lock to pid_mgr else multi-threaded issues --- .../xowa/addons/apps/cfgs/mgrs/Xocfg_cache_mgr__tst.java | 2 +- 400_xowa/src/gplx/xowa/xtns/wbases/Wbase_pid_mgr.java | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/Xocfg_cache_mgr__tst.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/Xocfg_cache_mgr__tst.java index 8c87461cb..11eeca3a2 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/Xocfg_cache_mgr__tst.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/Xocfg_cache_mgr__tst.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.addons.apps.cfgs.mgrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import org.junit.*; import gplx.core.tests.*; import gplx.dbs.*; import gplx.xowa.addons.apps.cfgs.dbs.*; public class Xocfg_cache_mgr__tst { - private final Xocfg_cache_mgr__fxt fxt = new Xocfg_cache_mgr__fxt(); +// private final Xocfg_cache_mgr__fxt fxt = new Xocfg_cache_mgr__fxt(); @Test public void Basic() { // fxt.Init__db_add("en.w", "key_1", "val_1"); // fxt.Test__get("en.w", "key_1", "val_1"); diff --git a/400_xowa/src/gplx/xowa/xtns/wbases/Wbase_pid_mgr.java b/400_xowa/src/gplx/xowa/xtns/wbases/Wbase_pid_mgr.java index 447d12881..7a327c54a 100644 --- a/400_xowa/src/gplx/xowa/xtns/wbases/Wbase_pid_mgr.java +++ b/400_xowa/src/gplx/xowa/xtns/wbases/Wbase_pid_mgr.java @@ -37,8 +37,10 @@ public class Wbase_pid_mgr { // EX: "en|road_map" -> 15 ("Property:P15") byte[] pid_key = Bry_.Add(lang_key, Byte_ascii.Pipe_bry, pid_name); // EX: "en|road_map" int rv = hash.Get_as_int_or(pid_key, -1); if (rv == -1) { - rv = wbase_mgr.Wdata_wiki().Db_mgr().Load_mgr().Load_pid(lang_key, pid_name); if (rv == Wdata_wiki_mgr.Pid_null) return rv; - Add(pid_key, rv); + synchronized (hash) { // LOCK:app-level; DATE:2016-12-03 + rv = wbase_mgr.Wdata_wiki().Db_mgr().Load_mgr().Load_pid(lang_key, pid_name); if (rv == Wdata_wiki_mgr.Pid_null) return rv; + Add(pid_key, rv); + } } return rv; }