mirror of
https://github.com/gnosygnu/xowa.git
synced 2024-10-27 20:34:16 +00:00
HTTP Server: Fix random deadlocks when serving multiple concurrent requests (writing json)
This commit is contained in:
parent
5e668b96c7
commit
3923df5e19
@ -28,6 +28,7 @@ public class Xoa_util_svc {
|
|||||||
public void Page_get(Json_nde args) {
|
public void Page_get(Json_nde args) {
|
||||||
// get args
|
// get args
|
||||||
String page_get_cbk = args.Get_as_str("page_get_cbk");
|
String page_get_cbk = args.Get_as_str("page_get_cbk");
|
||||||
|
byte[] protocol = args.Get_as_bry("protocol");
|
||||||
byte[] wiki_bry = args.Get_as_bry("wiki");
|
byte[] wiki_bry = args.Get_as_bry("wiki");
|
||||||
byte[] page_bry = args.Get_as_bry("page");
|
byte[] page_bry = args.Get_as_bry("page");
|
||||||
String vega_cbk_guid = args.Get_as_str("vega_cbk_guid");
|
String vega_cbk_guid = args.Get_as_str("vega_cbk_guid");
|
||||||
@ -43,12 +44,18 @@ public class Xoa_util_svc {
|
|||||||
// get page
|
// get page
|
||||||
Xoa_ttl ttl = wiki.Ttl_parse(page_bry);
|
Xoa_ttl ttl = wiki.Ttl_parse(page_bry);
|
||||||
Xow_page_cache_itm page_itm = wiki.Cache_mgr().Page_cache().Get_or_load_as_itm_2(ttl);
|
Xow_page_cache_itm page_itm = wiki.Cache_mgr().Page_cache().Get_or_load_as_itm_2(ttl);
|
||||||
|
byte[] page_text = page_itm == null ? null : page_itm.Wtxt__direct();
|
||||||
|
if (page_text == null) {
|
||||||
|
Gfo_usr_dlg_.Instance.Warn_many("", "", "Xoa_utl_svc:page not found: wiki=~{0} page=~{1}", wiki_bry, page_bry);
|
||||||
|
}
|
||||||
|
|
||||||
Xog_cbk_trg cbk_trg = Xog_cbk_trg.New_by_guid(page_guid);
|
Xog_cbk_trg cbk_trg = Xog_cbk_trg.New_by_guid(page_guid);
|
||||||
cbk_mgr.Send_json(cbk_trg, page_get_cbk, gplx.core.gfobjs.Gfobj_nde.New()
|
cbk_mgr.Send_json(cbk_trg, page_get_cbk, gplx.core.gfobjs.Gfobj_nde.New()
|
||||||
|
.Add_bry("protocol", protocol)
|
||||||
.Add_bry("wiki", wiki_bry)
|
.Add_bry("wiki", wiki_bry)
|
||||||
.Add_bry("page", page_bry)
|
.Add_bry("page", page_bry)
|
||||||
.Add_str("vega_cbk_guid", vega_cbk_guid)
|
.Add_str("vega_cbk_guid", vega_cbk_guid)
|
||||||
.Add_bry("page_text", page_itm.Wtxt__direct())
|
.Add_bry("page_text", page_text)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,8 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
|
|||||||
*/
|
*/
|
||||||
package gplx.xowa.guis.cbks.swts; import gplx.*; import gplx.xowa.*; import gplx.xowa.guis.*; import gplx.xowa.guis.cbks.*;
|
package gplx.xowa.guis.cbks.swts; import gplx.*; import gplx.xowa.*; import gplx.xowa.guis.*; import gplx.xowa.guis.cbks.*;
|
||||||
import gplx.core.gfobjs.*;
|
import gplx.core.gfobjs.*;
|
||||||
public class Gfobj_wtr__json__browser extends Gfobj_wtr__json { private final Bry_bfr bfr;
|
public class Gfobj_wtr__json__browser extends Gfobj_wtr__json { private final Object thread_lock = new Object();
|
||||||
|
private final Bry_bfr bfr;
|
||||||
public Gfobj_wtr__json__browser() {
|
public Gfobj_wtr__json__browser() {
|
||||||
this.Opt_ws_(Bool_.N).Opt_backslash_2x_(Bool_.Y);
|
this.Opt_ws_(Bool_.N).Opt_backslash_2x_(Bool_.Y);
|
||||||
this.bfr = this.Bfr();
|
this.bfr = this.Bfr();
|
||||||
@ -23,6 +24,7 @@ public class Gfobj_wtr__json__browser extends Gfobj_wtr__json { private final
|
|||||||
public String Write_as_func__swt(String func_name, Gfobj_grp root) {return Write_as_func(Bool_.Y, func_name, root);}
|
public String Write_as_func__swt(String func_name, Gfobj_grp root) {return Write_as_func(Bool_.Y, func_name, root);}
|
||||||
public String Write_as_func__drd(String func_name, Gfobj_grp root) {return Write_as_func(Bool_.N, func_name, root);}
|
public String Write_as_func__drd(String func_name, Gfobj_grp root) {return Write_as_func(Bool_.N, func_name, root);}
|
||||||
private String Write_as_func(boolean write_return, String func_name, Gfobj_grp root) {
|
private String Write_as_func(boolean write_return, String func_name, Gfobj_grp root) {
|
||||||
|
synchronized (thread_lock) { // LOCK:needed else random http_server issues; DATE:2018-03-13
|
||||||
if (write_return) bfr.Add(Bry__func_bgn); // NOTE: Android WebView fails if return is passed; EX: "return 'true'" works on SWT.Browser, but not WebView
|
if (write_return) bfr.Add(Bry__func_bgn); // NOTE: Android WebView fails if return is passed; EX: "return 'true'" works on SWT.Browser, but not WebView
|
||||||
bfr.Add_str_u8(func_name);
|
bfr.Add_str_u8(func_name);
|
||||||
bfr.Add(Bry__args_bgn);
|
bfr.Add(Bry__args_bgn);
|
||||||
@ -30,6 +32,7 @@ public class Gfobj_wtr__json__browser extends Gfobj_wtr__json { private final
|
|||||||
bfr.Add(Bry__args_end);
|
bfr.Add(Bry__args_end);
|
||||||
return this.To_str();
|
return this.To_str();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
private static final byte[]
|
private static final byte[]
|
||||||
Bry__func_bgn = Bry_.new_a7("return ")
|
Bry__func_bgn = Bry_.new_a7("return ")
|
||||||
, Bry__args_bgn = Bry_.new_a7("('")
|
, Bry__args_bgn = Bry_.new_a7("('")
|
||||||
|
@ -65,7 +65,7 @@ public class Xoh_head_itm__graph extends Xoh_head_itm__base {
|
|||||||
tags.Add(Xopg_tag_itm.New_js_file(xtn_dir.GenSubFil_nest("lib", "d3.layout.cloud.js")));
|
tags.Add(Xopg_tag_itm.New_js_file(xtn_dir.GenSubFil_nest("lib", "d3.layout.cloud.js")));
|
||||||
tags.Add(Xopg_tag_itm.New_js_file(xtn_dir.GenSubFil_nest("lib", "vega2", "vega.js")));
|
tags.Add(Xopg_tag_itm.New_js_file(xtn_dir.GenSubFil_nest("lib", "vega2", "vega.js")));
|
||||||
tags.Add(Xopg_tag_itm.New_js_file(xtn_dir.GenSubFil_nest("lib", "graph2.compiled.js")));
|
tags.Add(Xopg_tag_itm.New_js_file(xtn_dir.GenSubFil_nest("lib", "graph2.compiled.js")));
|
||||||
// tags.Add(Xopg_tag_itm.New_js_file(xtn_dir.GenSubFil_nest("modules", "graph2.js")));
|
tags.Add(Xopg_tag_itm.New_js_file(xtn_dir.GenSubFil_nest("modules", "graph2.js")));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
tags.Add(Xopg_tag_itm.New_js_file(xtn_dir.GenSubFil_nest("lib", "vega1", "vega.js")));
|
tags.Add(Xopg_tag_itm.New_js_file(xtn_dir.GenSubFil_nest("lib", "vega1", "vega.js")));
|
||||||
|
Loading…
Reference in New Issue
Block a user