Skip to content

Fix bug with hanged pseudoterminal - #84181

Merged
Daniel Imms (Tyriar) merged 10 commits into
microsoft:masterfrom
solomatov:pty_bug
Nov 19, 2019
Merged

Fix bug with hanged pseudoterminal#84181
Daniel Imms (Tyriar) merged 10 commits into
microsoft:masterfrom
solomatov:pty_bug

Conversation

@solomatov

@solomatov Konstantin Solomatov (solomatov) commented Nov 8, 2019

Copy link
Copy Markdown
Contributor

This PR fixes #84174
More time to initialize terminal as well as exponential backoff for wait periods.

Comment thread src/vs/workbench/api/common/extHostTerminalService.ts Outdated
@Tyriar Daniel Imms (Tyriar) added this to the November 2019 milestone Nov 8, 2019
@Tyriar

Copy link
Copy Markdown
Contributor

You can run these tests with ./scripts/test-integration.sh (or .bat). To skip the other integration tests you can change this:

To use suite.only (but we don't want to commit that).

@solomatov

Konstantin Solomatov (solomatov) commented Nov 8, 2019

Copy link
Copy Markdown
Contributor Author

Daniel Imms (@Tyriar) It seems that finally I made the tests pass. Could you take a look? :-) Glad that you have the tests. When I made initial change, I didn't find them.

Also, what do you do if a build breaks. Is there a good way to clean everything? I have it all the time when I have yarn watch running, and change branches.

@solomatov

Copy link
Copy Markdown
Contributor Author

Daniel Imms (@Tyriar) I also have a question for getting rid of delays in other place. There's this code:

	// TODO: This could be improved by using a single promise and resolve it when the terminal is ready
	private _getTerminalByIdEventually(id: number, retries: number = 5): Promise<ExtHostTerminal | undefined> {
		if (!this._getTerminalPromises[id]) {
			this._getTerminalPromises[id] = this._createGetTerminalPromise(id, retries);
		} else {
			this._getTerminalPromises[id].then(c => {
				return this._createGetTerminalPromise(id, retries);
			});
		}
		return this._getTerminalPromises[id];
	}

Do I understand correctly that the else branch does nothing useful? The then block is activated only if the terminal is found, and the value returned by then has no side effects.

@Tyriar

Copy link
Copy Markdown
Contributor

Will try review soon

Is there a good way to clean everything? I have it all the time when I have yarn watch running, and change branches.

Typically we don't need to do anything here as TypeScript is pretty good at handling this. If I do get into this state I'll either delete out or nuke everything and start from scratch (git stash or commit then git clean -xfd).

Do I understand correctly that the else branch does nothing useful?

I think that was to restart retrying maybe? That TODO is actually talking about how I proposed we fix this; create a bunch of promises and store their resolves instead of using polling.

@solomatov

Copy link
Copy Markdown
Contributor Author

Daniel Imms (@Tyriar) Are there any updates on this? This fix is very important for us.

@solomatov

Copy link
Copy Markdown
Contributor Author

Daniel Imms (@Tyriar) Any updates on this?

@Tyriar Daniel Imms (Tyriar) left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Konstantin Solomatov (@solomatov) I made some changes to simplify the PR. Let me know if this still looks good and if so I'll merge in.

@solomatov

Copy link
Copy Markdown
Contributor Author

Daniel Imms (@Tyriar) You know this code definitely better than me, and your changes looks good to me, so feel free to merge.

@solomatov

Copy link
Copy Markdown
Contributor Author

Daniel Imms (@Tyriar) Do you need help resolving this merge?

@solomatov

Copy link
Copy Markdown
Contributor Author

Daniel Imms (@Tyriar) Remerged again, and hopefully, it will work well.

@solomatov

Konstantin Solomatov (solomatov) commented Nov 18, 2019

Copy link
Copy Markdown
Contributor Author

Daniel Imms (@Tyriar) Seems merge worked this time.

@Tyriar
Daniel Imms (Tyriar) merged commit 96f91be into microsoft:master Nov 19, 2019
@github-actions github-actions Bot locked and limited conversation to collaborators Mar 27, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PseudoTerminal.open isn't called in some circumstances

2 participants