2929
3030import javax .annotation .Nullable ;
3131import java .time .Duration ;
32- import java .util .Collection ;
3332import java .util .concurrent .atomic .AtomicBoolean ;
3433import java .util .concurrent .atomic .AtomicInteger ;
3534import java .util .function .Consumer ;
@@ -122,22 +121,15 @@ class RSocketClient implements RSocket {
122121 }
123122
124123 private void handleSendProcessorError (Throwable t ) {
125- Collection <UnicastProcessor <Payload >> values ;
126- Collection <LimitableRequestPublisher > values1 ;
127- synchronized (RSocketClient .this ) {
128- values = receivers .values ();
129- values1 = senders .values ();
130- }
131-
132- for (Subscriber subscriber : values ) {
124+ for (Subscriber subscriber : receivers .values ()) {
133125 try {
134126 subscriber .onError (t );
135127 } catch (Throwable e ) {
136128 errorConsumer .accept (e );
137129 }
138130 }
139131
140- for (LimitableRequestPublisher p : values1 ) {
132+ for (LimitableRequestPublisher p : senders . values () ) {
141133 p .cancel ();
142134 }
143135 }
@@ -146,22 +138,16 @@ private void handleSendProcessorCancel(SignalType t) {
146138 if (SignalType .ON_ERROR == t ) {
147139 return ;
148140 }
149- Collection <UnicastProcessor <Payload >> values ;
150- Collection <LimitableRequestPublisher > values1 ;
151- synchronized (RSocketClient .this ) {
152- values = receivers .values ();
153- values1 = senders .values ();
154- }
155141
156- for (Subscriber subscriber : values ) {
142+ for (Subscriber subscriber : receivers . values () ) {
157143 try {
158144 subscriber .onError (new Throwable ("closed connection" ));
159145 } catch (Throwable e ) {
160146 errorConsumer .accept (e );
161147 }
162148 }
163149
164- for (LimitableRequestPublisher p : values1 ) {
150+ for (LimitableRequestPublisher p : senders . values () ) {
165151 p .cancel ();
166152 }
167153 }
@@ -255,10 +241,7 @@ public Flux<Payload> handleRequestStream(final Payload payload) {
255241 int streamId = streamIdSupplier .nextStreamId ();
256242
257243 UnicastProcessor <Payload > receiver = UnicastProcessor .create ();
258-
259- synchronized (this ) {
260- receivers .put (streamId , receiver );
261- }
244+ receivers .put (streamId , receiver );
262245
263246 AtomicBoolean first = new AtomicBoolean (false );
264247
@@ -289,7 +272,7 @@ public Flux<Payload> handleRequestStream(final Payload payload) {
289272 })
290273 .doFinally (
291274 s -> {
292- removeReceiver (streamId );
275+ receivers . remove (streamId );
293276 });
294277 }));
295278 }
@@ -304,10 +287,7 @@ private Mono<Payload> handleRequestResponse(final Payload payload) {
304287 payload .release ();
305288
306289 UnicastProcessor <Payload > receiver = UnicastProcessor .create ();
307-
308- synchronized (this ) {
309- receivers .put (streamId , receiver );
310- }
290+ receivers .put (streamId , receiver );
311291
312292 sendProcessor .onNext (requestFrame );
313293
@@ -317,7 +297,7 @@ private Mono<Payload> handleRequestResponse(final Payload payload) {
317297 .doOnCancel (() -> sendProcessor .onNext (Frame .Cancel .from (streamId )))
318298 .doFinally (
319299 s -> {
320- removeReceiver (streamId );
300+ receivers . remove (streamId );
321301 });
322302 }));
323303 }
@@ -364,10 +344,8 @@ public Flux<Payload> get() {
364344 LimitableRequestPublisher .wrap (f );
365345 // Need to set this to one for first the frame
366346 wrapped .increaseRequestLimit (1 );
367- synchronized (RSocketClient .this ) {
368- senders .put (streamId , wrapped );
369- receivers .put (streamId , receiver );
370- }
347+ senders .put (streamId , wrapped );
348+ receivers .put (streamId , receiver );
371349
372350 return wrapped ;
373351 })
@@ -424,39 +402,32 @@ public Frame apply(Payload payload) {
424402 })
425403 .doFinally (
426404 s -> {
427- removeReceiver (streamId );
428- removeSender (streamId );
405+ receivers . remove (streamId );
406+ senders . remove (streamId );
429407 });
430408 }
431409 }));
432410 }
433411
434412 private boolean contains (int streamId ) {
435- synchronized (RSocketClient .this ) {
436- return receivers .containsKey (streamId );
437- }
413+ return receivers .containsKey (streamId );
438414 }
439415
440416 protected void cleanup () {
441417 try {
442- Collection < UnicastProcessor <Payload >> subscribers ;
443- Collection < LimitableRequestPublisher > publishers ;
444- synchronized ( RSocketClient . this ) {
445- subscribers = receivers .values ();
446- publishers = senders . values ( );
418+ for ( UnicastProcessor <Payload > subscriber : receivers . values ()) {
419+ cleanUpSubscriber ( subscriber ) ;
420+ }
421+ for ( LimitableRequestPublisher p : senders .values ()) {
422+ cleanUpLimitableRequestPublisher ( p );
447423 }
448-
449- subscribers .forEach (this ::cleanUpSubscriber );
450- publishers .forEach (this ::cleanUpLimitableRequestPublisher );
451424
452425 if (null != keepAliveSendSub ) {
453426 keepAliveSendSub .dispose ();
454427 }
455428 } finally {
456- synchronized (this ) {
457- senders .clear ();
458- receivers .clear ();
459- }
429+ senders .clear ();
430+ receivers .clear ();
460431 }
461432 }
462433
@@ -513,29 +484,23 @@ private void handleStreamZero(FrameType type, Frame frame) {
513484 }
514485
515486 private void handleFrame (int streamId , FrameType type , Frame frame ) {
516- Subscriber <Payload > receiver ;
517- synchronized (this ) {
518- receiver = receivers .get (streamId );
519- }
487+ Subscriber <Payload > receiver = receivers .get (streamId );
520488 if (receiver == null ) {
521489 handleMissingResponseProcessor (streamId , type , frame );
522490 } else {
523491 switch (type ) {
524492 case ERROR :
525493 receiver .onError (Exceptions .from (frame ));
526- removeReceiver (streamId );
494+ receivers . remove (streamId );
527495 break ;
528496 case NEXT_COMPLETE :
529497 receiver .onNext (frameDecoder .apply (frame ));
530498 receiver .onComplete ();
531499 break ;
532500 case CANCEL :
533501 {
534- LimitableRequestPublisher sender ;
535- synchronized (this ) {
536- sender = senders .remove (streamId );
537- removeReceiver (streamId );
538- }
502+ LimitableRequestPublisher sender = senders .remove (streamId );
503+ receivers .remove (streamId );
539504 if (sender != null ) {
540505 sender .cancel ();
541506 }
@@ -546,10 +511,7 @@ private void handleFrame(int streamId, FrameType type, Frame frame) {
546511 break ;
547512 case REQUEST_N :
548513 {
549- LimitableRequestPublisher sender ;
550- synchronized (this ) {
551- sender = senders .get (streamId );
552- }
514+ LimitableRequestPublisher sender = senders .get (streamId );
553515 if (sender != null ) {
554516 int n = Frame .RequestN .requestN (frame );
555517 sender .increaseRequestLimit (n );
@@ -559,9 +521,7 @@ private void handleFrame(int streamId, FrameType type, Frame frame) {
559521 }
560522 case COMPLETE :
561523 receiver .onComplete ();
562- synchronized (this ) {
563- receivers .remove (streamId );
564- }
524+ receivers .remove (streamId );
565525 break ;
566526 default :
567527 throw new IllegalStateException (
@@ -593,12 +553,4 @@ private void handleMissingResponseProcessor(int streamId, FrameType type, Frame
593553 // receiving a frame after a given stream has been cancelled/completed,
594554 // so ignore (cancellation is async so there is a race condition)
595555 }
596-
597- private synchronized void removeReceiver (int streamId ) {
598- receivers .remove (streamId );
599- }
600-
601- private synchronized void removeSender (int streamId ) {
602- senders .remove (streamId );
603- }
604556}
0 commit comments