- void do_read_event(ConcurrentLinkedQueue<Thread> list, PeerManager pm, SocketDescriptor descriptor, byte[] data) {
- Thread thread = new Thread(() -> {
- Result_boolPeerHandleErrorZ res = pm.read_event(descriptor, data);
- assert res instanceof Result_boolPeerHandleErrorZ.Result_boolPeerHandleErrorZ_OK;
- //assert ((Result_boolPeerHandleErrorZ.Result_boolPeerHandleErrorZ_OK) res).res;
- });
- thread.start();
- list.add(thread);
+ boolean running = false;
+ final LinkedList<Runnable> runqueue = new LinkedList();
+ Thread t = new Thread(() -> {
+ while (true) {
+ try {
+ Runnable r;
+ synchronized (runqueue) {
+ while (runqueue.isEmpty()) {
+ runqueue.wait();
+ }
+ running = true;
+ r = runqueue.pollFirst();
+ }
+ r.run();
+ synchronized (runqueue) {
+ running = false;
+ runqueue.notifyAll();
+ }
+ } catch (InterruptedException e) {
+ return;
+ }
+ }
+ });
+ void wait_events_processed() {
+ while (true) {
+ synchronized (runqueue) {
+ if (runqueue.isEmpty() && !running) break;
+ try { runqueue.wait(); } catch (InterruptedException e) { assert false; }
+ }
+ }
+ }
+ void do_read_event(PeerManager pm, SocketDescriptor descriptor, byte[] data) {
+ if (!t.isAlive()) t.start();
+ synchronized (runqueue) {
+ runqueue.add(() -> {
+ Result_boolPeerHandleErrorZ res = pm.read_event(descriptor, data);
+ assert res instanceof Result_boolPeerHandleErrorZ.Result_boolPeerHandleErrorZ_OK;
+ });
+ runqueue.notifyAll();
+ }