Skip to content

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

Merged
OrKoN merged 3 commits into
puppeteer:mainfrom
whimboo:kill_temporary_folder
Nov 15, 2021
Merged

fix: try to remove the temporary user data directory after the proces…#7761
OrKoN merged 3 commits into
puppeteer:mainfrom
whimboo:kill_temporary_folder

Conversation

@whimboo

@whimboo whimboo commented Nov 10, 2021

Copy link
Copy Markdown
Collaborator

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 whimboo force-pushed the kill_temporary_folder branch from 3c6662b to 3c6dc5d Compare November 10, 2021 19:50
@whimboo

whimboo commented Nov 10, 2021

Copy link
Copy Markdown
Collaborator Author

@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
Comment thread src/node/BrowserRunner.ts
}
}

// Attempt to remove temporary profile directory to avoid littering.

Copy link
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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

@OrKoN OrKoN left a comment

Copy link
Copy Markdown
Collaborator

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

whimboo commented Nov 15, 2021

Copy link
Copy Markdown
Collaborator Author

Thank you for merging!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants