Skip to content

Commit 167afd9

Browse files
committed
Fix delegation in LifecyclePrintWriter
Closes gh-36885
1 parent 12f9a5c commit 167afd9

1 file changed

Lines changed: 38 additions & 87 deletions

File tree

spring-web/src/main/java/org/springframework/web/context/request/async/StandardServletAsyncWebRequest.java

Lines changed: 38 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -453,221 +453,172 @@ private LifecyclePrintWriter(PrintWriter delegate, StandardServletAsyncWebReques
453453

454454
@Override
455455
public void flush() {
456-
int level = this.asyncWebRequest.tryObtainLock();
457-
if (level > -1) {
458-
try {
459-
this.delegate.flush();
460-
}
461-
finally {
462-
releaseLock(level);
463-
}
464-
}
456+
invokeWithLock(this.delegate::flush);
465457
}
466458

467-
@Override
468-
public void close() {
459+
private void invokeWithLock(Runnable runnable) {
469460
int level = this.asyncWebRequest.tryObtainLock();
470461
if (level > -1) {
471462
try {
472-
this.delegate.close();
463+
runnable.run();
473464
}
474465
finally {
475-
releaseLock(level);
466+
if (level > 0) {
467+
this.asyncWebRequest.stateLock.unlock();
468+
}
476469
}
477470
}
478471
}
479472

480473
@Override
481-
public boolean checkError() {
482-
return this.delegate.checkError();
474+
public void close() {
475+
invokeWithLock(this.delegate::close);
483476
}
484477

485478
@Override
486479
public void write(int c) {
487-
int level = this.asyncWebRequest.tryObtainLock();
488-
if (level > -1) {
489-
try {
490-
this.delegate.write(c);
491-
}
492-
finally {
493-
releaseLock(level);
494-
}
495-
}
480+
invokeWithLock(() -> this.delegate.write(c));
496481
}
497482

498483
@Override
499484
public void write(char[] buf, int off, int len) {
500-
int level = this.asyncWebRequest.tryObtainLock();
501-
if (level > -1) {
502-
try {
503-
this.delegate.write(buf, off, len);
504-
}
505-
finally {
506-
releaseLock(level);
507-
}
508-
}
485+
invokeWithLock(() -> this.delegate.write(buf, off, len));
509486
}
510487

511488
@Override
512489
public void write(char[] buf) {
513-
this.delegate.write(buf);
490+
write(buf, 0, buf.length);
514491
}
515492

516493
@Override
517494
public void write(String s, int off, int len) {
518-
int level = this.asyncWebRequest.tryObtainLock();
519-
if (level > -1) {
520-
try {
521-
this.delegate.write(s, off, len);
522-
}
523-
finally {
524-
releaseLock(level);
525-
}
526-
}
495+
invokeWithLock(() -> this.delegate.write(s, off, len));
527496
}
528497

529498
@Override
530499
public void write(String s) {
531-
this.delegate.write(s);
532-
}
533-
534-
private void releaseLock(int level) {
535-
if (level > 0) {
536-
this.asyncWebRequest.stateLock.unlock();
537-
}
500+
write(s, 0, s.length());
538501
}
539502

540503
// Plain delegates
541504

542505
@Override
543506
public void print(boolean b) {
544-
this.delegate.print(b);
507+
write(String.valueOf(b));
545508
}
546509

547510
@Override
548511
public void print(char c) {
549-
this.delegate.print(c);
512+
write(c);
550513
}
551514

552515
@Override
553516
public void print(int i) {
554-
this.delegate.print(i);
517+
write(String.valueOf(i));
555518
}
556519

557520
@Override
558521
public void print(long l) {
559-
this.delegate.print(l);
522+
write(String.valueOf(l));
560523
}
561524

562525
@Override
563526
public void print(float f) {
564-
this.delegate.print(f);
527+
write(String.valueOf(f));
565528
}
566529

567530
@Override
568531
public void print(double d) {
569-
this.delegate.print(d);
532+
write(String.valueOf(d));
570533
}
571534

572535
@Override
573536
public void print(char[] s) {
574-
this.delegate.print(s);
537+
write(s);
575538
}
576539

577540
@Override
578541
public void print(String s) {
579-
this.delegate.print(s);
542+
write(String.valueOf(s));
580543
}
581544

582545
@Override
583546
public void print(Object obj) {
584-
this.delegate.print(obj);
547+
write(String.valueOf(obj));
585548
}
586549

587550
@Override
588551
public void println() {
589-
this.delegate.println();
552+
invokeWithLock(this.delegate::println);
590553
}
591554

592555
@Override
593556
public void println(boolean x) {
594-
this.delegate.println(x);
557+
invokeWithLock(() -> this.delegate.println(x));
595558
}
596559

597560
@Override
598561
public void println(char x) {
599-
this.delegate.println(x);
562+
invokeWithLock(() -> this.delegate.println(x));
600563
}
601564

602565
@Override
603566
public void println(int x) {
604-
this.delegate.println(x);
567+
invokeWithLock(() -> this.delegate.println(x));
605568
}
606569

607570
@Override
608571
public void println(long x) {
609-
this.delegate.println(x);
572+
invokeWithLock(() -> this.delegate.println(x));
610573
}
611574

612575
@Override
613576
public void println(float x) {
614-
this.delegate.println(x);
577+
invokeWithLock(() -> this.delegate.println(x));
615578
}
616579

617580
@Override
618581
public void println(double x) {
619-
this.delegate.println(x);
582+
invokeWithLock(() -> this.delegate.println(x));
620583
}
621584

622585
@Override
623586
public void println(char[] x) {
624-
this.delegate.println(x);
587+
invokeWithLock(() -> this.delegate.println(x));
625588
}
626589

627590
@Override
628591
public void println(String x) {
629-
this.delegate.println(x);
592+
invokeWithLock(() -> this.delegate.println(x));
630593
}
631594

632595
@Override
633596
public void println(Object x) {
634-
this.delegate.println(x);
597+
invokeWithLock(() -> this.delegate.println(x));
635598
}
636599

637600
@Override
638601
public PrintWriter printf(String format, Object... args) {
639-
return this.delegate.printf(format, args);
602+
return format(format, args);
640603
}
641604

642605
@Override
643606
public PrintWriter printf(Locale l, String format, Object... args) {
644-
return this.delegate.printf(l, format, args);
607+
return format(format, args);
645608
}
646609

647610
@Override
648611
public PrintWriter format(String format, Object... args) {
649-
return this.delegate.format(format, args);
612+
invokeWithLock(() -> this.delegate.format(format, args));
613+
return this;
650614
}
651615

652616
@Override
653617
public PrintWriter format(Locale l, String format, Object... args) {
654-
return this.delegate.format(l, format, args);
655-
}
656-
657-
@Override
658-
public PrintWriter append(CharSequence csq) {
659-
return this.delegate.append(csq);
618+
invokeWithLock(() -> this.delegate.format(format, args));
619+
return this;
660620
}
661621

662-
@Override
663-
public PrintWriter append(CharSequence csq, int start, int end) {
664-
return this.delegate.append(csq, start, end);
665-
}
666-
667-
@Override
668-
public PrintWriter append(char c) {
669-
return this.delegate.append(c);
670-
}
671622
}
672623

673624

0 commit comments

Comments
 (0)