Skip to content

Commit 5720c7c

Browse files
committed
add tests + fix
1 parent e5fd91d commit 5720c7c

31 files changed

+859
-800
lines changed

net.lecousin.core/src/main/java/net/lecousin/framework/application/LCCore.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ public static void set(Environment env) throws IllegalStateException {
7777
instance = env;
7878
}
7979

80+
/** Initialize properties. */
8081
public static void initEnvironment() {
8182
// init logging system if not specified
8283
if (System.getProperty("org.apache.commons.logging.Log") == null)

net.lecousin.core/src/main/java/net/lecousin/framework/collections/TurnArray.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import java.util.List;
1010
import java.util.NoSuchElementException;
1111

12-
import net.lecousin.framework.concurrent.CancelException;
1312
import net.lecousin.framework.concurrent.Task;
1413
import net.lecousin.framework.concurrent.Threading;
1514
import net.lecousin.framework.exception.NoException;

net.lecousin.core/src/main/java/net/lecousin/framework/io/text/Decoder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public int decode(char[] chars, int pos, int len, MutableBoolean interrupt, int
9393
int nb = 0;
9494
do {
9595
if (currentBuffer == null) {
96-
// TODO if (nextBuffer.isUnblocked())
96+
// TODO if (nextBuffer.isUnblocked())
9797
currentBuffer = nextBuffer.blockResult(0);
9898
// else
9999
// return nb > 0 ? nb : -2;

net.lecousin.core/src/main/java/net/lecousin/framework/io/util/BroadcastIO.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,17 @@ public ISynchronizationPoint<IOException> canStartWriting() {
8989
public int writeSync(ByteBuffer buffer) throws IOException {
9090
JoinPoint<IOException> jp = new JoinPoint<>();
9191
jp.addToJoin(ios.length);
92+
int nb = buffer.remaining();
9293
for (int i = 0; i < ios.length; ++i) {
93-
ios[i].writeAsync(buffer.duplicate()).listenInline(new AsyncWorkListener<Integer, IOException>() {
94+
ios[i].writeAsync(
95+
i == ios.length - 1 ? buffer : buffer.duplicate()
96+
).listenInline(new AsyncWorkListener<Integer, IOException>() {
9497

9598
@Override
9699
public void ready(Integer result) {
97-
if (result.intValue() != buffer.remaining())
100+
if (result.intValue() != nb)
98101
jp.error(new IOException("Only " + result.intValue()
99-
+ " byte(s) written instead of " + buffer.remaining()));
102+
+ " byte(s) written instead of " + nb));
100103
else
101104
jp.joined();
102105
}
@@ -114,7 +117,7 @@ public void cancelled(CancelException event) {
114117
}
115118
jp.start();
116119
jp.blockException(0);
117-
return buffer.remaining();
120+
return nb;
118121
}
119122

120123
@Override
@@ -123,14 +126,17 @@ public AsyncWork<Integer, IOException> writeAsync(ByteBuffer buffer, RunnableWit
123126
new Task.Cpu.FromRunnable("BroadcastIO.writeAsync", priority, () -> {
124127
JoinPoint<IOException> jp = new JoinPoint<>();
125128
jp.addToJoin(ios.length);
129+
int nb = buffer.remaining();
126130
for (int i = 0; i < ios.length; ++i) {
127-
ios[i].writeAsync(buffer.duplicate()).listenInline(new AsyncWorkListener<Integer, IOException>() {
131+
ios[i].writeAsync(
132+
i == ios.length - 1 ? buffer : buffer.duplicate()
133+
).listenInline(new AsyncWorkListener<Integer, IOException>() {
128134

129135
@Override
130136
public void ready(Integer result) {
131-
if (result.intValue() != buffer.remaining())
137+
if (result.intValue() != nb)
132138
jp.error(new IOException("Only " + result.intValue()
133-
+ " byte(s) written instead of " + buffer.remaining()));
139+
+ " byte(s) written instead of " + nb));
134140
else
135141
jp.joined();
136142
}
@@ -148,7 +154,7 @@ public void cancelled(CancelException event) {
148154
}
149155
jp.start();
150156
jp.listenInline(() -> {
151-
result.unblockSuccess(Integer.valueOf(buffer.remaining()));
157+
result.unblockSuccess(Integer.valueOf(nb));
152158
}, result);
153159
}).start();
154160
return result;

net.lecousin.core/src/main/java/net/lecousin/framework/memory/ByteArrayCache.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ public byte[] get(int size, boolean acceptGreater) {
6969
ArraysBySize arrays = node.getElement();
7070
arrays.lastUsageTime = System.currentTimeMillis();
7171
buf = arrays.arrays.poll();
72+
if (arrays.arrays.isEmpty()) arraysBySize.remove(node);
7273
}
7374
}
7475
if (buf == null)

net.lecousin.core/src/main/java/net/lecousin/framework/memory/IntArrayCache.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,34 +69,35 @@ public int[] get(int size, boolean acceptGreater) {
6969
ArraysBySize arrays = node.getElement();
7070
arrays.lastUsageTime = System.currentTimeMillis();
7171
buf = arrays.arrays.poll();
72+
if (arrays.arrays.isEmpty()) arraysBySize.remove(node);
7273
}
7374
}
7475
if (buf == null)
7576
return new int[size];
76-
totalSize -= buf.length;
77+
totalSize -= buf.length * 4;
7778
return buf;
7879
}
7980

8081
/** Put an array in the cache. */
8182
public void free(int[] array) {
8283
int len = array.length;
8384
synchronized (arraysBySize) {
84-
if (totalSize + len > maxTotalSize) return;
85+
if (totalSize + len * 4 > maxTotalSize) return;
8586
Node<ArraysBySize> node = arraysBySize.get(len);
8687
if (node == null) {
8788
ArraysBySize arrays = new ArraysBySize();
8889
arrays.arrays = new TurnArray<>(
89-
len >= 128 * 1024 ? maxBuffersBySizeAbove128KB : maxBuffersBySizeUnder128KB);
90+
len * 4 >= 128 * 1024 ? maxBuffersBySizeAbove128KB : maxBuffersBySizeUnder128KB);
9091
arrays.arrays.add(array);
9192
arrays.lastCachedTime = System.currentTimeMillis();
9293
arraysBySize.add(len, arrays);
93-
totalSize += len;
94+
totalSize += len * 4;
9495
return;
9596
}
9697
ArraysBySize arrays = node.getElement();
9798
arrays.lastCachedTime = System.currentTimeMillis();
9899
if (arrays.arrays.isFull()) return;
99-
totalSize += len;
100+
totalSize += len * 4;
100101
arrays.arrays.add(array);
101102
}
102103
}
@@ -108,7 +109,7 @@ public String getDescription() {
108109

109110
@Override
110111
public List<String> getItemsDescription() {
111-
return Arrays.asList("Total cached size: " + (totalSize * 4));
112+
return Arrays.asList("Total cached size: " + totalSize);
112113
}
113114

114115
@Override
@@ -145,7 +146,7 @@ private void freeMemory(long beforeTime, int nbToRemove) {
145146
continue;
146147
for (int i = 0; i < nbToRemove && !arrays.arrays.isEmpty(); ++i) {
147148
arrays.arrays.poll();
148-
totalSize -= node.getValue();
149+
totalSize -= node.getValue() * 4;
149150
}
150151
if (arrays.arrays.isEmpty())
151152
toRemove.add(node);

net.lecousin.core/src/main/java/net/lecousin/framework/util/IDManagerStringFromLong.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package net.lecousin.framework.util;
22

3+
/**
4+
* IDManagerString using an IDManagerLong and a StringEncoding.
5+
*/
36
public class IDManagerStringFromLong implements IDManagerString {
47

8+
/** Constructor. */
59
public IDManagerStringFromLong(IDManagerLong manager, StringEncoding<Long> encoder) {
610
this.manager = manager;
711
this.encoder = encoder;
812
}
913

14+
/** Constructor. */
1015
public IDManagerStringFromLong(IDManagerLong manager) {
1116
this(manager, new StringEncoding.SimpleLong());
1217
}

net.lecousin.core/src/main/java/net/lecousin/framework/xml/serialization/XMLDeserializer.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,9 @@ public XMLDeserializer(XMLStreamEventsAsync input, String expectedRootNamespaceU
7474

7575
/** Deserialize from a file accessible from the classpath. */
7676
@SuppressWarnings("resource")
77-
public static <T> AsyncWork<T, Exception> deserializeResource(String resourcePath, Class<T> type, List<SerializationRule> rules, byte priority) {
77+
public static <T> AsyncWork<T, Exception> deserializeResource(
78+
String resourcePath, Class<T> type, List<SerializationRule> rules, byte priority
79+
) {
7880
IO.Readable io = LCCore.getApplication().getResource(resourcePath, priority);
7981
if (io == null) return new AsyncWork<>(null, new FileNotFoundException("Resource not found: " + resourcePath));
8082
AsyncWork<T, Exception> result = deserialize(io, type, rules);
@@ -95,7 +97,9 @@ public static <T> AsyncWork<T, Exception> deserializeFile(File file, Class<T> ty
9597
@SuppressWarnings("unchecked")
9698
public static <T> AsyncWork<T, Exception> deserialize(IO.Readable input, Class<T> type, List<SerializationRule> rules) {
9799
XMLDeserializer deserializer = new XMLDeserializer(null, type.getSimpleName());
98-
AsyncWork<Object, Exception> res = deserializer.deserialize(new TypeDefinition(type), input, rules == null ? new ArrayList<>(0) : rules);
100+
AsyncWork<Object, Exception> res = deserializer.deserialize(
101+
new TypeDefinition(type), input, rules == null ? new ArrayList<>(0) : rules
102+
);
99103
AsyncWork<T, Exception> result = new AsyncWork<>();
100104
res.listenInline((obj) -> {
101105
result.unblockSuccess((T)obj);

0 commit comments

Comments
 (0)