Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: try to remove the temporary user data directory after the proces… #7761

Merged
merged 3 commits into from Nov 15, 2021

Conversation

whimboo
Copy link
Collaborator

@whimboo whimboo commented Nov 10, 2021

Seen while investigating issues on Windows via #7668. We are trying to remove the temporary user data directory before the process is killed. That means that the process has still hold on some of the files, and removing the folder will definitely fail.

A try to remove the folder should happen afterward.

@whimboo
Copy link
Collaborator Author

whimboo commented Nov 10, 2021

@OrKoN and @jschfflr, even with no actual improvement for Firefox because the process cannot be correctly killed (see #7668 (comment)), that change would make sense anyway and we can benefit at a later time.

Not sure about Chrome and why it's not failing there.

@whimboo whimboo requested a review from OrKoN November 11, 2021 07:21
@@ -199,6 +192,14 @@ export class BrowserRunner {
);
}
}

// Attempt to remove temporary profile directory to avoid littering.
Copy link
Collaborator

Choose a reason for hiding this comment

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

What if this.proc.kill('SIGKILL') throws but the process is still killed? Can that happen in practice? That might be the reason for removing the temp dir upfront?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Good question. So I've taken a look at the subprocess.kill() documentation, and I cannot see that an error gets thrown at all. So my question would be do we really need the try/catch and will we ever re-throw the error (that is the part that I totally issed - thanks for noting!).

Shouldn't a check for the return value be performed instead? We could then throw an error at the end of the method, and could still have the user data directory deletion before. If it is false we could still try to remove the user data directory even if not fully successful.

Maybe the error and close events could be used here to better handle the kill status by making the BrowserRunner.kill() method async.

Copy link
Collaborator

Choose a reason for hiding this comment

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

Yeah, that's strange. I could not find why it was like this in the first place. It does not look like it can throw https://github.com/nodejs/node/blob/master/lib/child_process.js#L419

Copy link
Collaborator

@OrKoN OrKoN left a comment

Choose a reason for hiding this comment

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

since .kill() does not throw, LGTM. We could also clean up the try catch.

@OrKoN OrKoN enabled auto-merge (squash) November 15, 2021 11:36
@OrKoN OrKoN merged commit fc94a28 into puppeteer:main Nov 15, 2021
@whimboo
Copy link
Collaborator Author

whimboo commented Nov 15, 2021

Thank you for merging!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants