Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 34k
gh-120317: Lock around global state in the tokenize module#120318
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
Uh oh!
There was an error while loading. Please reload this page.
Conversation
Uh oh!
There was an error while loading. Please reload this page.
78df829 to abf568aCompareFidget-Spinner commented Jun 10, 2024
This LGTM. Can you add the reproducer to |
lysnikolaou commented Jun 10, 2024
@Fidget-Spinner I added more locking around global state. Reviewing each commit seprately might make it easier. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Fidget-Spinner left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks like a refactor, so good so far.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
lysnikolaou commented Jun 10, 2024
Feedback addressed. @Fidget-Spinner I used |
Fidget-Spinner left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Feel free to ignore the following comments if this part of the tokenizer is not perf sensitive.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
lysnikolaou commented Jun 10, 2024
All feedback addressed. Thanks a lot for the reviews and the help @Fidget-Spinner and @erlend-aasland! |
Uh oh!
There was an error while loading. Please reload this page.
pablogsal left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
| @threading_helper.requires_working_threading() | ||
| classTestTokenize(unittest.TestCase): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tested this locally: it crashes spectacularly without the fix :)
| } | ||
| goto exit; | ||
| } | ||
| if (it->done||type==ERRORTOKEN){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Don't we need to protect the read? Otherwise we may get weird partial reads no?
pablogsal commented Jun 11, 2024
Actually, one question here: shouldn't we be protecting all reads of the |
pablogsal commented Jun 11, 2024
For example, this read is not protected, no?: |
20c7cb2 to 1c51dafCompareCo-authored-by: Pablo Galindo <pablogsal@gmail.com>
1c51daf to ca466faComparelysnikolaou commented Jun 11, 2024
After some offline discussion with @pablogsal, we decided it makes more sense to just lock around all of |
Uh oh!
There was an error while loading. Please reload this page.
| try: | ||
| r=next(it) | ||
| tokens.append(tokenize.TokenInfo._make(r)) | ||
| time.sleep(1) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we make this test faster? It's going to run on every CI job. I think we should aim for 0.1 seconds or less for these sorts of tests. (It's currently ~3 seconds).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Changed the amount of time each thread sleeps to 0.03 secs, which means that the whole test now takes about 0.1 seconds. Also verified that the test still fails without the fix and succeeds with it.
lysnikolaou commented Jul 1, 2024 • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
@pablogsal Can you do a final review here when you have some spare cycles? |
pablogsal left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed the PR and the comments and it LGTM
I also ran the tests locally in free threaded mode to confirm
Thanks @lysnikolaou for the PR 🌮🎉.. I'm working now to backport this PR to: 3.13. |
…honGH-120318) (cherry picked from commit 8549559) Co-authored-by: Lysandros Nikolaou <lisandrosnik@gmail.com> Co-authored-by: Pablo Galindo <pablogsal@gmail.com>
GH-121841 is a backport of this pull request to the 3.13 branch. |
…hon#120318) Co-authored-by: Pablo Galindo <pablogsal@gmail.com>
Uh oh!
There was an error while loading. Please reload this page.