diff --git a/classpath/java/io/BufferedReader.java b/classpath/java/io/BufferedReader.java index ef02fb3e2c..3d2e3fd6bc 100644 --- a/classpath/java/io/BufferedReader.java +++ b/classpath/java/io/BufferedReader.java @@ -44,6 +44,10 @@ public class BufferedReader extends Reader { public int read(char[] b, int offset, int length) throws IOException { int count = 0; + if (position >= limit && length < buffer.length) { + fill(); + } + if (position < limit) { int remaining = limit - position; if (remaining > length) { diff --git a/src/machine.cpp b/src/machine.cpp index c933a790bc..89d237c3fd 100644 --- a/src/machine.cpp +++ b/src/machine.cpp @@ -1872,10 +1872,10 @@ hashMapInsert(Thread* t, object map, object key, object value, PROTECT(t, key); PROTECT(t, value); - t->vm->weakReferences = makeWeakReference - (t, t->vm->weakReferences, 0, 0, 0); - jreferenceTarget(t, t->vm->weakReferences) = key; - key = t->vm->weakReferences; + object r = makeWeakReference(t, 0, 0, 0, 0); + jreferenceTarget(t, r) = key; + jreferenceNext(t, r) = t->vm->weakReferences; + key = t->vm->weakReferences = r; } object n = makeTriple(t, key, value, arrayBody(t, array, index));