Skip to content

Commit 83ab49c

Browse files
committed
add logs when IO not correctly closed
1 parent b6a167a commit 83ab49c

File tree

7 files changed

+38
-2
lines changed

7 files changed

+38
-2
lines changed

net.lecousin.core/src/main/java/net/lecousin/framework/concurrent/synch/AsyncWork.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.lecousin.framework.concurrent.synch;
22

33
import java.util.ArrayList;
4+
import java.util.Collection;
45

56
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
67
import net.lecousin.framework.application.Application;
@@ -72,6 +73,12 @@ public boolean hasError() {
7273
return error != null;
7374
}
7475

76+
@Override
77+
public Collection<?> getAllListeners() {
78+
if (listenersInline == null) return new ArrayList<>(0);
79+
return new ArrayList<>(listenersInline);
80+
}
81+
7582
/** Add a listener to be called when this AsyncWork is unblocked. */
7683
public void listenInline(AsyncWorkListener<T,TError> listener) {
7784
synchronized (this) {

net.lecousin.core/src/main/java/net/lecousin/framework/concurrent/synch/ISynchronizationPoint.java

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

3+
import java.util.Collection;
4+
35
import net.lecousin.framework.concurrent.CancelException;
46
import net.lecousin.framework.concurrent.Task;
57
import net.lecousin.framework.event.Listener;
@@ -230,4 +232,7 @@ default AsyncWork<Void, TError> toAsyncWorkVoid() {
230232
return aw;
231233
}
232234

235+
/** Return a collection with all listeners, only for debugging purposes. */
236+
public Collection<?> getAllListeners();
237+
233238
}

net.lecousin.core/src/main/java/net/lecousin/framework/concurrent/synch/LockPoint.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.lecousin.framework.concurrent.synch;
22

33
import java.util.ArrayList;
4+
import java.util.Collection;
45

56
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
67
import net.lecousin.framework.concurrent.BlockedThreadHandler;
@@ -92,6 +93,12 @@ public void blockPause(long logAfter) {
9293
}
9394
}
9495

96+
@Override
97+
public Collection<?> getAllListeners() {
98+
if (listeners == null) return new ArrayList<>(0);
99+
return new ArrayList<>(listeners);
100+
}
101+
95102
@Override
96103
public void listenInline(Runnable r) {
97104
synchronized (this) {

net.lecousin.core/src/main/java/net/lecousin/framework/concurrent/synch/SynchronizationPoint.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.lecousin.framework.concurrent.synch;
22

33
import java.util.ArrayList;
4+
import java.util.Collection;
45

56
import net.lecousin.framework.application.Application;
67
import net.lecousin.framework.application.LCCore;
@@ -41,6 +42,12 @@ public SynchronizationPoint(CancelException cancel) {
4142
private CancelException cancelled = null;
4243
private ArrayList<Runnable> listenersInline = null;
4344

45+
@Override
46+
public Collection<?> getAllListeners() {
47+
if (listenersInline == null) return new ArrayList<>(0);
48+
return new ArrayList<>(listenersInline);
49+
}
50+
4451
@Override
4552
public void listenInline(Runnable r) {
4653
synchronized (this) {

net.lecousin.core/src/main/java/net/lecousin/framework/concurrent/synch/WaitingDataQueueSynchronizationPoint.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.lecousin.framework.concurrent.synch;
22

33
import java.util.ArrayList;
4+
import java.util.Collection;
45

56
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
67
import net.lecousin.framework.collections.TurnArray;
@@ -93,6 +94,12 @@ public void endOfData() {
9394
}
9495
}
9596

97+
@Override
98+
public Collection<?> getAllListeners() {
99+
if (listeners == null) return new ArrayList<>(0);
100+
return new ArrayList<>(listeners);
101+
}
102+
96103
@Override
97104
public boolean isUnblocked() {
98105
return !waitingData.isEmpty() || cancel != null || error != null;

net.lecousin.core/src/main/java/net/lecousin/framework/io/buffering/BufferedIO.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1189,7 +1189,7 @@ public Void run() {
11891189
if (p < size && (bufferIndex != 0 || startReadSecondBufferWhenFirstBufferFullyRead)) {
11901190
int nextIndex = getBufferIndex(p);
11911191
if (nextIndex != bufferIndex) loadBuffer(nextIndex);
1192-
} else
1192+
} else if (p > size)
11931193
size = p;
11941194
if (buf.remaining() == 0) {
11951195
if (ondone != null) ondone.run(new Pair<>(Integer.valueOf(len + alreadyDone), null));

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,11 @@ public ISynchronizationPoint<Exception> closeAsync() {
149149
StringBuilder s = new StringBuilder();
150150
s.append("Closeable still waiting for pending operations: ").append(this);
151151
for (ISynchronizationPoint<?> op : pending)
152-
if (!op.isUnblocked())
152+
if (!op.isUnblocked()) {
153153
s.append("\r\n - ").append(op);
154+
for (Object o : op.getAllListeners())
155+
s.append("\r\n - ").append(o);
156+
}
154157
if (underlying != null && !underlying.isUnblocked())
155158
s.append("\r\n - closeUnderlyingResources");
156159
LCCore.getApplication().getDefaultLogger().error(s.toString());

0 commit comments

Comments
 (0)