@@ -249,7 +249,9 @@ public void onTorNodeReady() {
249
249
250
250
requestDataManager .requestPreliminaryData ();
251
251
keepAliveManager .start ();
252
- p2pServiceListeners .forEach (SetupListener ::onTorNodeReady );
252
+ synchronized (p2pServiceListeners ) {
253
+ p2pServiceListeners .forEach (SetupListener ::onTorNodeReady );
254
+ }
253
255
}
254
256
255
257
@ Override
@@ -258,17 +260,23 @@ public void onHiddenServicePublished() {
258
260
259
261
hiddenServicePublished .set (true );
260
262
261
- p2pServiceListeners .forEach (SetupListener ::onHiddenServicePublished );
263
+ synchronized (p2pServiceListeners ) {
264
+ p2pServiceListeners .forEach (SetupListener ::onHiddenServicePublished );
265
+ }
262
266
}
263
267
264
268
@ Override
265
269
public void onSetupFailed (Throwable throwable ) {
266
- p2pServiceListeners .forEach (e -> e .onSetupFailed (throwable ));
270
+ synchronized (p2pServiceListeners ) {
271
+ p2pServiceListeners .forEach (e -> e .onSetupFailed (throwable ));
272
+ }
267
273
}
268
274
269
275
@ Override
270
276
public void onRequestCustomBridges () {
271
- p2pServiceListeners .forEach (SetupListener ::onRequestCustomBridges );
277
+ synchronized (p2pServiceListeners ) {
278
+ p2pServiceListeners .forEach (SetupListener ::onRequestCustomBridges );
279
+ }
272
280
}
273
281
274
282
// Called from networkReadyBinding
@@ -304,7 +312,9 @@ public void onPreliminaryDataReceived() {
304
312
305
313
@ Override
306
314
public void onUpdatedDataReceived () {
307
- p2pServiceListeners .forEach (P2PServiceListener ::onUpdatedDataReceived );
315
+ synchronized (p2pServiceListeners ) {
316
+ p2pServiceListeners .forEach (P2PServiceListener ::onUpdatedDataReceived );
317
+ }
308
318
}
309
319
310
320
@ Override
@@ -314,7 +324,9 @@ public void onNoSeedNodeAvailable() {
314
324
315
325
@ Override
316
326
public void onNoPeersAvailable () {
317
- p2pServiceListeners .forEach (P2PServiceListener ::onNoPeersAvailable );
327
+ synchronized (p2pServiceListeners ) {
328
+ p2pServiceListeners .forEach (P2PServiceListener ::onNoPeersAvailable );
329
+ }
318
330
}
319
331
320
332
@ Override
@@ -334,7 +346,9 @@ private void applyIsBootstrapped(Consumer<P2PServiceListener> listenerHandler) {
334
346
mailboxMessageService .onBootstrapped ();
335
347
336
348
// Once we have applied the state in the P2P domain we notify our listeners
337
- p2pServiceListeners .forEach (listenerHandler );
349
+ synchronized (p2pServiceListeners ) {
350
+ p2pServiceListeners .forEach (listenerHandler );
351
+ }
338
352
339
353
mailboxMessageService .initAfterBootstrapped ();
340
354
}
@@ -369,12 +383,14 @@ public void onMessage(NetworkEnvelope networkEnvelope, Connection connection) {
369
383
try {
370
384
DecryptedMessageWithPubKey decryptedMsg = encryptionService .decryptAndVerify (sealedMsg .getSealedAndSigned ());
371
385
connection .maybeHandleSupportedCapabilitiesMessage (decryptedMsg .getNetworkEnvelope ());
372
- connection .getPeersNodeAddressOptional ().ifPresentOrElse (nodeAddress ->
373
- decryptedDirectMessageListeners .forEach (e -> e .onDirectMessage (decryptedMsg , nodeAddress )),
374
- () -> {
375
- log .error ("peersNodeAddress is expected to be available at onMessage for " +
376
- "processing PrefixedSealedAndSignedMessage." );
377
- });
386
+ connection .getPeersNodeAddressOptional ().ifPresentOrElse (nodeAddress -> {
387
+ synchronized (decryptedDirectMessageListeners ) {
388
+ decryptedDirectMessageListeners .forEach (e -> e .onDirectMessage (decryptedMsg , nodeAddress ));
389
+ }
390
+ }, () -> {
391
+ log .error ("peersNodeAddress is expected to be available at onMessage for " +
392
+ "processing PrefixedSealedAndSignedMessage." );
393
+ });
378
394
} catch (CryptoException e ) {
379
395
log .warn ("Decryption of a direct message failed. This is not expected as the " +
380
396
"direct message was sent to our node." );
@@ -503,19 +519,27 @@ public boolean removeData(ProtectedStoragePayload protectedStoragePayload) {
503
519
///////////////////////////////////////////////////////////////////////////////////////////
504
520
505
521
public void addDecryptedDirectMessageListener (DecryptedDirectMessageListener listener ) {
506
- decryptedDirectMessageListeners .add (listener );
522
+ synchronized (decryptedDirectMessageListeners ) {
523
+ decryptedDirectMessageListeners .add (listener );
524
+ }
507
525
}
508
526
509
527
public void removeDecryptedDirectMessageListener (DecryptedDirectMessageListener listener ) {
510
- decryptedDirectMessageListeners .remove (listener );
528
+ synchronized (decryptedDirectMessageListeners ) {
529
+ decryptedDirectMessageListeners .remove (listener );
530
+ }
511
531
}
512
532
513
533
public void addP2PServiceListener (P2PServiceListener listener ) {
514
- p2pServiceListeners .add (listener );
534
+ synchronized (p2pServiceListeners ) {
535
+ p2pServiceListeners .add (listener );
536
+ }
515
537
}
516
538
517
539
public void removeP2PServiceListener (P2PServiceListener listener ) {
518
- p2pServiceListeners .remove (listener );
540
+ synchronized (p2pServiceListeners ) {
541
+ p2pServiceListeners .remove (listener );
542
+ }
519
543
}
520
544
521
545
public void addHashSetChangedListener (HashMapChangedListener hashMapChangedListener ) {
0 commit comments