fix(terminal): memory leak in TermuxService.LocalBinder

This commit is contained in:
Akash Yadav
2023-12-25 16:01:38 +05:30
parent 14f76fb9b0
commit b1f22689fa
2 changed files with 27 additions and 5 deletions
@@ -49,6 +49,8 @@ import com.termux.terminal.TerminalEmulator;
import com.termux.terminal.TerminalSession;
import com.termux.terminal.TerminalSessionClient;
import java.io.Closeable;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@@ -68,11 +70,20 @@ import java.util.List;
public final class TermuxService extends Service implements AppShell.AppShellClient, TermuxSession.TermuxSessionClient {
/** This service is only bound from inside the same process and never uses IPC. */
class LocalBinder extends Binder {
public final TermuxService service = TermuxService.this;
static class LocalBinder extends Binder implements Closeable {
public TermuxService service;
LocalBinder(final TermuxService service) {
this.service = service;
}
@Override
public void close() {
service = null;
}
}
private final IBinder mBinder = new LocalBinder();
private final LocalBinder mBinder = new LocalBinder(this);
private final Handler mHandler = new Handler();
@@ -215,6 +226,10 @@ public final class TermuxService extends Service implements AppShell.AppShellCli
private void requestStopService() {
Logger.logDebug(LOG_TAG, "Requesting to stop service");
runStopForeground();
mBinder.close();
mTermuxTerminalSessionServiceClient.close();
stopSelf();
}
@@ -9,13 +9,16 @@ import com.termux.shared.termux.shell.command.runner.terminal.TermuxSession;
import com.termux.shared.termux.terminal.TermuxTerminalSessionClientBase;
import com.termux.terminal.TerminalSession;
import com.termux.terminal.TerminalSessionClient;
import java.io.Closeable;
import java.io.IOException;
/** The {@link TerminalSessionClient} implementation that may require a {@link Service} for its interface methods. */
public class TermuxTerminalSessionServiceClient extends TermuxTerminalSessionClientBase {
public class TermuxTerminalSessionServiceClient extends TermuxTerminalSessionClientBase implements
Closeable {
private static final String LOG_TAG = "TermuxTerminalSessionServiceClient";
private final TermuxService mService;
private TermuxService mService;
public TermuxTerminalSessionServiceClient(TermuxService service) {
this.mService = service;
@@ -28,4 +31,8 @@ public class TermuxTerminalSessionServiceClient extends TermuxTerminalSessionCli
termuxSession.getExecutionCommand().mPid = pid;
}
@Override
public void close() {
mService = null;
}
}