mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
HTTP Server: Fix random deadlocks when serving multiple concurrent requests (writing json)
This commit is contained in:
@@ -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.*;
|
||||
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() {
|
||||
this.Opt_ws_(Bool_.N).Opt_backslash_2x_(Bool_.Y);
|
||||
this.bfr = this.Bfr();
|
||||
@@ -23,12 +24,14 @@ 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__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) {
|
||||
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(Bry__args_bgn);
|
||||
this.Write(root);
|
||||
bfr.Add(Bry__args_end);
|
||||
return this.To_str();
|
||||
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
|
||||
bfr.Add_str_u8(func_name);
|
||||
bfr.Add(Bry__args_bgn);
|
||||
this.Write(root);
|
||||
bfr.Add(Bry__args_end);
|
||||
return this.To_str();
|
||||
}
|
||||
}
|
||||
private static final byte[]
|
||||
Bry__func_bgn = Bry_.new_a7("return ")
|
||||
|
||||
Reference in New Issue
Block a user