Skip to content

Commit

Permalink
Fixed FirstByteCachingStream in JNH Connector
Browse files Browse the repository at this point in the history
Signed-off-by: jansupol <jan.supol@oracle.com>
  • Loading branch information
jansupol committed Mar 21, 2024
1 parent 6ad2d5b commit 9b9e494
Showing 1 changed file with 38 additions and 27 deletions.
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -360,48 +360,55 @@ private FirstByteCachingStream(InputStream inner) {
@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;

}

@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();
return available;
}
int available = inner.available();
if (available != 1) {
return available;
}

zero = inner.read();
if (zero == -1) {
available = 0;
zero = inner.read();
if (zero == -1) {
available = 0;
}
return available;
} finally {
lock.unlock();
}
lock.unlock();
return available;
}

@Override
Expand All @@ -418,10 +425,14 @@ public boolean markSupported() {
}

@Override
public synchronized void mark(int readlimit) {
public void mark(int readlimit) {
inner.mark(readlimit);
}

@Override
public void reset() throws IOException {
inner.reset();
}
}

}

0 comments on commit 9b9e494

Please sign in to comment.