in core/src/main/java/org/apache/airavata/mft/core/DoubleStreamingBuffer.java [88:141]
public void write(int b) throws IOException {
if (!barrierPassed) {
try {
if (readBuffer1) {
buffer2Lock.lock();
} else {
buffer1Lock.lock();
}
// wait for reader to enter into read block for the first time
barrier.await();
barrierPassed = true;
} catch (Exception e) {
throw new IOException(e);
}
}
//System.out.println("Write " + readBuffer1 + " " + buf1Remain + " " + buf2Remain);
if (readBuffer1) {
if (buf2Remain < bufferSize) {
buffer2[buf2Remain] = (byte)b;
buf2Remain ++;
} else {
barrier.reset();
buffer2Lock.unlock();
buffer1Lock.lock();
try {
// Wait for reader to move into next buffer
barrier.await();
} catch (Exception e) {
throw new IOException();
}
write(b);
}
} else {
if (buf1Remain < bufferSize) {
buffer1[buf1Remain] = (byte)b;
buf1Remain++;
} else {
barrier.reset();
buffer1Lock.unlock();
buffer2Lock.lock();
try {
// Wait for reader to move into next buffer
barrier.await();
} catch (Exception e) {
throw new IOException();
}
write(b);
}
}
}