Skip to content

Commit 64ba769

Browse files
committed
Prevent a possible memory leak of object references
This may be the cause of streams crashing after ~30mins
1 parent 42b5f71 commit 64ba769

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

app/src/main/java/ie/macinnes/tvheadend/player/HtspDataSource.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.google.android.exoplayer2.upstream.DataSpec;
2727

2828
import java.io.ByteArrayOutputStream;
29+
import java.io.Closeable;
2930
import java.io.IOException;
3031
import java.io.ObjectOutput;
3132
import java.io.ObjectOutputStream;
@@ -38,7 +39,7 @@
3839
import ie.macinnes.htsp.tasks.Subscriber;
3940
import ie.macinnes.tvheadend.Constants;
4041

41-
public class HtspDataSource implements DataSource, Subscriber.Listener {
42+
public class HtspDataSource implements DataSource, Subscriber.Listener, Closeable {
4243
private static final String TAG = HtspDataSource.class.getName();
4344
private static final int FIFTEEN_MB = 15*1024*1024;
4445

@@ -152,6 +153,8 @@ public Uri getUri() {
152153

153154
@Override
154155
public void close() throws IOException {
156+
mIsOpen = false;
157+
155158
mConnection.removeAuthenticationListener(mSubscriber);
156159
mSubscriber.unsubscribe();
157160
}
@@ -183,9 +186,9 @@ private void serializeMessageToBuffer(@NonNull HtspMessage message) {
183186

184187
mLock.lock();
185188
try (
186-
ObjectOutput objectOutput = new ObjectOutputStream(outputStream);
189+
ObjectOutputStream objectOutput = new ObjectOutputStream(outputStream);
187190
) {
188-
objectOutput.writeObject(message);
191+
objectOutput.writeUnshared(message);
189192
objectOutput.flush();
190193

191194
mBuffer.position(mBuffer.limit());

app/src/main/java/ie/macinnes/tvheadend/player/HtspExtractor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,12 @@ public int read(ExtractorInput input, PositionHolder seekPosition) throws IOExce
100100
Log.v(TAG, "Read " + bytesRead + " bytes");
101101

102102
ByteArrayInputStream inputStream = new ByteArrayInputStream(rawBytes, 0, bytesRead);
103-
ObjectInput objectInput = null;
103+
ObjectInputStream objectInput = null;
104104

105105
try {
106106
while (inputStream.available() > 0) {
107107
objectInput = new ObjectInputStream(inputStream);
108-
handleMessage((HtspMessage) objectInput.readObject());
108+
handleMessage((HtspMessage) objectInput.readUnshared());
109109
}
110110
} catch (IOException e) {
111111
// Ignore?

0 commit comments

Comments
 (0)