Fixed FirstByteCachingStream in JNH Connector
Signed-off-by: jansupol <jan.supol@oracle.com>
diff --git a/connectors/jnh-connector/src/main/java/org/glassfish/jersey/jnh/connector/JavaNetHttpConnector.java b/connectors/jnh-connector/src/main/java/org/glassfish/jersey/jnh/connector/JavaNetHttpConnector.java
index 69d25eb..57296c6 100644
--- a/connectors/jnh-connector/src/main/java/org/glassfish/jersey/jnh/connector/JavaNetHttpConnector.java
+++ b/connectors/jnh-connector/src/main/java/org/glassfish/jersey/jnh/connector/JavaNetHttpConnector.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021, 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2024 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
@@ -360,24 +360,30 @@
@Override
public int read() throws IOException {
lock.lock();
- final int r = zero != -1 ? zero : inner.read();
- zero = -1;
- lock.unlock();
- return r;
+ try {
+ final int r = zero != -1 ? zero : inner.read();
+ zero = -1;
+ return r;
+ } finally {
+ lock.unlock();
+ }
}
@Override
public int read(byte[] b, int off, int len) throws IOException {
lock.lock();
int r;
- if (zero != -1) {
- b[off] = (byte) (zero & 0xFF);
- r = inner.read(b, off + 1, len - 1);
- } else {
- r = inner.read(b, off, len);
+ try {
+ if (zero != -1) {
+ b[off] = (byte) (zero & 0xFF);
+ r = inner.read(b, off + 1, len - 1);
+ } else {
+ r = inner.read(b, off, len);
+ }
+ zero = -1;
+ } finally {
+ lock.unlock();
}
- zero = -1;
- lock.unlock();
return r;
}
@@ -385,23 +391,24 @@
@Override
public int available() throws IOException {
lock.lock();
- if (zero != -1) {
- lock.unlock();
- return 1;
- }
+ try {
+ if (zero != -1) {
+ return 1;
+ }
- int available = inner.available();
- if (available != 1) {
- lock.unlock();
+ int available = inner.available();
+ if (available != 1) {
+ return available;
+ }
+
+ zero = inner.read();
+ if (zero == -1) {
+ available = 0;
+ }
return available;
+ } finally {
+ lock.unlock();
}
-
- zero = inner.read();
- if (zero == -1) {
- available = 0;
- }
- lock.unlock();
- return available;
}
@Override
@@ -418,10 +425,14 @@
}
@Override
- public synchronized void mark(int readlimit) {
+ public void mark(int readlimit) {
inner.mark(readlimit);
}
+ @Override
+ public void reset() throws IOException {
+ inner.reset();
+ }
}
}