- peer1.peer_manager.process_events();
- while (!list.isEmpty()) { list.poll().join(); }
- peer2.peer_manager.process_events();
- while (!list.isEmpty()) { list.poll().join(); }
- peer1.peer_manager.process_events();
- while (!list.isEmpty()) { list.poll().join(); }
+ if (reload_peers) {
+ if (use_nio_peer_handler) {
+ peer1.nio_peer_handler.interrupt();
+ peer2.nio_peer_handler.interrupt();
+ }
+ WeakReference<Peer> op1 = new WeakReference<Peer>(peer1);
+ peer1 = new Peer(peer1);
+ peer2 = new Peer(peer2);
+ return new TestState(op1, peer1, peer2, payment_preimage, b.getHash());
+ }
+ return new TestState(null, peer1, peer2, payment_preimage, b.getHash());
+ }
+
+ boolean cross_reload_ref_pollution = false;
+ class TestState {
+ private final WeakReference<Peer> ref_block;
+ private final Peer peer1;
+ private final Peer peer2;
+ private final byte[] payment_preimage;
+ public Sha256Hash best_blockhash;
+
+ public TestState(WeakReference<Peer> ref_block, Peer peer1, Peer peer2, byte[] payment_preimage, Sha256Hash best_blockhash) {
+ this.ref_block = ref_block;
+ this.peer1 = peer1;
+ this.peer2 = peer2;
+ this.payment_preimage = payment_preimage;
+ this.best_blockhash = best_blockhash;
+ }
+ }
+ void do_test_message_handler_b(TestState state) {
+ GcCheck obj = new GcCheck();
+ if (state.ref_block != null) {
+ // Ensure the original peers get freed before we move on. Note that we have to be in a different function
+ // scope to do so as the (at least current OpenJDK) JRE won't release anything created in the same scope.
+ while (!cross_reload_ref_pollution && state.ref_block.get() != null) {
+ System.gc();
+ System.runFinalization();
+ }
+ connect_peers(state.peer1, state.peer2);
+ wait_events_processed(state.peer1, state.peer2);
+ }