1
0
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

This commit is contained in:
gnosygnu 2018-03-11 21:28:29 -04:00
parent 93bac15244
commit 5e668b96c7
3 changed files with 37 additions and 28 deletions

View File

@ -43,6 +43,7 @@ class Http_server_wkr implements Gfo_invk {
this.socket = socket;
}
public void Run(){
synchronized (client_rdr) { // LOCK:else http_server may sometimes deadlock when serving multiple parallel requests; // DATE:2018-03-11
Http_request_itm request = null;
try {
client_rdr.Stream_(socket.Get_input_stream());
@ -68,6 +69,7 @@ class Http_server_wkr implements Gfo_invk {
}
}
}
}
private void Process_get(Http_request_itm request, byte[] url) {
server_wtr.Write_str_w_nl(String_.new_u8(request.Host()) + "|GET|" + String_.new_u8(request.Url())); // use request url
if (Bry_.Has_at_bgn(url, Url__fsys)) Serve_file(url);

View File

@ -36,7 +36,7 @@ public class Xoh_head_itm__graph extends Xoh_head_itm__base {
Xopg_tag_wtr_.Add__xologger(tags, http_root);
Xopg_tag_wtr_.Add__xolog(tags, http_root, false);
Xopg_tag_wtr_.Add__xoajax(tags, http_root, app);
Add__xograph(tags, http_root, page, version_is_1);
Add__xograph(tags, http_root, page, version_is_1, version_is_2);
// write tags
int len = tags.Len();
@ -51,7 +51,7 @@ public class Xoh_head_itm__graph extends Xoh_head_itm__base {
}
private static final byte[] Js__graph_exec = Bry_.new_a7("xo.xtns.graph.exec();");
private static void Add__xograph(Xopg_tag_mgr tags, Io_url http_root, Xoae_page page, boolean version_is_1) {
private static void Add__xograph(Xopg_tag_mgr tags, Io_url http_root, Xoae_page page, boolean version_is_1, boolean version_is_2) {
Io_url base_dir = http_root.GenSubDir_nest("bin", "any", "xowa", "html", "res", "src", "xowa", "core");
tags.Add(Xopg_tag_itm.New_js_file(base_dir.GenSubFil_nest("Html_.js")));
@ -59,15 +59,17 @@ public class Xoh_head_itm__graph extends Xoh_head_itm__base {
Io_url xtn_dir = http_root.GenSubDir_nest("bin", "any", "xowa", "xtns", "Graph");
tags.Add(Xopg_tag_itm.New_js_file(xtn_dir.GenSubFil_nest("lib", "d3.js")));
// tags.Add(Xopg_tag_itm.New_js_file(xtn_dir.GenSubFil_nest("lib", "d3-global.js"))); // XOWA: unused b/c module is not available
if (version_is_1) {
tags.Add(Xopg_tag_itm.New_js_file(xtn_dir.GenSubFil_nest("lib", "vega1", "vega.js")));
}
else {
// if v2 and v2, prefer v2;
if (version_is_2) {
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", "graph2.compiled.js")));
// tags.Add(Xopg_tag_itm.New_js_file(xtn_dir.GenSubFil_nest("modules", "graph2.js")));
}
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("Xograph.js")));
}
}

View File

@ -37,6 +37,11 @@ public class Graph_xnde implements Xox_xnde {
// get version; NOTE: default is 2; REF: https://noc.wikimedia.org/conf/InitialiseSettings.php.txt and 'wgGraphDefaultVegaVer' => ['default' => 2]; also, extension.json and "GraphDefaultVegaVer": 2
Json_doc jdoc = app.Utl__json_parser().Parse(json);
if (jdoc == null) {
Gfo_usr_dlg_.Instance.Warn_many("", "", "invalid json; page=~{0}", ctx.Page().Url().To_bry_full_wo_qargs());
return;
}
int version = jdoc.Get_val_as_int_or(Bry_.new_a7("version"), 2);
itm_graph.Version_(wpg.Url(), version);