Skip to content

Commit a1f5fbf

Browse files
committed
Avoid shutting down terminals when disconnecting JetBrains Client
1 parent 24a7d19 commit a1f5fbf

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/jetbrains/remote/GitpodTerminalService.kt

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@
44

55
package io.gitpod.jetbrains.remote
66

7+
import com.intellij.openapi.Disposable
78
import com.intellij.openapi.diagnostic.thisLogger
89
import com.intellij.openapi.project.Project
10+
import com.intellij.openapi.rd.defineNestedLifetime
911
import com.intellij.util.application
1012
import com.jediterm.terminal.ui.TerminalWidget
1113
import com.jediterm.terminal.ui.TerminalWidgetListener
14+
import com.jetbrains.rd.framework.util.launch
1215
import com.jetbrains.rdserver.terminal.BackendTerminalManager
1316
import io.gitpod.supervisor.api.Status
1417
import io.gitpod.supervisor.api.StatusServiceGrpc
@@ -17,14 +20,15 @@ import io.gitpod.supervisor.api.TerminalServiceGrpc
1720
import io.grpc.StatusRuntimeException
1821
import io.grpc.stub.ClientCallStreamObserver
1922
import io.grpc.stub.ClientResponseObserver
23+
import kotlinx.coroutines.delay
2024
import org.jetbrains.plugins.terminal.ShellTerminalWidget
2125
import org.jetbrains.plugins.terminal.TerminalView
2226
import java.util.*
2327
import java.util.concurrent.CompletableFuture
2428
import java.util.concurrent.ExecutionException
2529
import java.util.concurrent.TimeUnit
2630

27-
class GitpodTerminalService(project: Project) {
31+
class GitpodTerminalService(project: Project): Disposable {
2832
private companion object {
2933
var hasStarted = false
3034
}
@@ -34,11 +38,14 @@ class GitpodTerminalService(project: Project) {
3438
private val terminalServiceFutureStub = TerminalServiceGrpc.newFutureStub(GitpodManager.supervisorChannel)
3539
private val terminalServiceStub = TerminalServiceGrpc.newStub(GitpodManager.supervisorChannel)
3640
private val statusServiceStub = StatusServiceGrpc.newStub(GitpodManager.supervisorChannel)
41+
private val lifetime = defineNestedLifetime()
3742

3843
init {
3944
start()
4045
}
4146

47+
override fun dispose() = Unit
48+
4249
private fun start() {
4350
if (application.isHeadlessEnvironment || hasStarted) return
4451

@@ -270,11 +277,14 @@ class GitpodTerminalService(project: Project) {
270277
@Suppress("ObjectLiteralToLambda")
271278
shellTerminalWidget.addListener(object : TerminalWidgetListener {
272279
override fun allSessionsClosed(widget: TerminalWidget) {
273-
terminalServiceFutureStub.shutdown(
274-
TerminalOuterClass.ShutdownTerminalRequest.newBuilder()
275-
.setAlias(supervisorTerminal.alias)
276-
.build()
277-
)
280+
lifetime.launch {
281+
delay(5000)
282+
terminalServiceFutureStub.shutdown(
283+
TerminalOuterClass.ShutdownTerminalRequest.newBuilder()
284+
.setAlias(supervisorTerminal.alias)
285+
.build()
286+
)
287+
}
278288
}
279289
})
280290
}

0 commit comments

Comments
 (0)