Title: AssemblyManager.FindAssemblyCandidates runs without GIL and crashes with "Attempted to read or write protected memory" unpredictably · Issue #2481 · pythonnet/pythonnet · GitHub
Open Graph Title: AssemblyManager.FindAssemblyCandidates runs without GIL and crashes with "Attempted to read or write protected memory" unpredictably · Issue #2481 · pythonnet/pythonnet
X Title: AssemblyManager.FindAssemblyCandidates runs without GIL and crashes with "Attempted to read or write protected memory" unpredictably · Issue #2481 · pythonnet/pythonnet
Description: Environment Pythonnet version: 3.0.4 Python version: 3.11.9 Operating System: Windows 11 Pro .NET Runtime: .NET Core 8 Details When assemblies are dynamically loaded in .NET, PythonNet assembly loading hook can crash with "Attempted to r...
Open Graph Description: Environment Pythonnet version: 3.0.4 Python version: 3.11.9 Operating System: Windows 11 Pro .NET Runtime: .NET Core 8 Details When assemblies are dynamically loaded in .NET, PythonNet assembly loa...
X Description: Environment Pythonnet version: 3.0.4 Python version: 3.11.9 Operating System: Windows 11 Pro .NET Runtime: .NET Core 8 Details When assemblies are dynamically loaded in .NET, PythonNet assembly loa...
Opengraph URL: https://github.com/pythonnet/pythonnet/issues/2481
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"AssemblyManager.FindAssemblyCandidates runs without GIL and crashes with \"Attempted to read or write protected memory\" unpredictably","articleBody":"### Environment\r\n\r\n- Pythonnet version: 3.0.4\r\n- Python version: 3.11.9\r\n- Operating System: Windows 11 Pro\r\n- .NET Runtime: .NET Core 8\r\n\r\n### Details\r\n\r\nWhen assemblies are dynamically loaded in .NET, PythonNet assembly loading hook can crash with \"Attempted to read or write protected memory.\" I'm still trying to make a repro, but maybe you'll immediately see what's wrong.\r\n\r\nhttps://github.com/pythonnet/pythonnet/blob/de7a1d2d2aa505a4be5e4dee9368e514b6963bef/src/runtime/AssemblyManager.cs#L206\r\n\r\nI think that the issue may be that during assembly loading, the AssemblyManager hook runs without a GIL, so it _may_ crash with the error above. I've seen multiple stack traces happening at different times, often in code completely unrelated to PythonNet (there is multithreading, I use PythonEngine.BeginAllowThreads())\r\n\r\nThis did not happen in version 3.0.3.\r\n\r\n- Describe what you were trying to get done.\r\n\r\n Run an application normally that has more than one assembly being loaded (e.g. resources)\r\n\r\n- What commands did you run to trigger this issue? If you can provide a\r\n [Minimal, Complete, and Verifiable example](http://stackoverflow.com/help/mcve)\r\n this will help us understand the issue.\r\n\r\nI will try to provide one, although it's difficult to reproduce reliably\r\n\r\n- If there was a crash, please include the traceback here.\r\n\r\n```\r\nFatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.\r\n at Python.Runtime.Runtime.PyObject_GetAttrString(Python.Runtime.BorrowedReference, System.String)\r\n at Python.Runtime.AssemblyManager+\u003cFindAssemblyCandidates\u003ed__15.MoveNext()\r\n at System.Linq.Enumerable.TryGetFirst[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1\u003cSystem.__Canon\u003e, Boolean ByRef)\r\n at System.Linq.Enumerable.FirstOrDefault[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1\u003cSystem.__Canon\u003e)\r\n at Python.Runtime.AssemblyManager.FindAssembly(System.String)\r\n at Python.Runtime.AssemblyManager.LoadAssemblyPath(System.String)\r\n at Python.Runtime.AssemblyManager.ResolveHandler(System.Object, System.ResolveEventArgs)\r\n at System.Runtime.Loader.AssemblyLoadContext.InvokeResolveEvent(System.ResolveEventHandler, System.Reflection.RuntimeAssembly, System.String)\r\n at System.Reflection.RuntimeAssembly.InternalLoad(System.Reflection.AssemblyName, System.Threading.StackCrawlMark ByRef, System.Runtime.Loader.AssemblyLoadContext, System.Reflection.RuntimeAssembly, Boolean)\r\n at ...\r\n```\r\n","author":{"url":"https://github.com/acidbubbles","@type":"Person","name":"acidbubbles"},"datePublished":"2024-10-11T05:12:41.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":5},"url":"https://github.com/2481/pythonnet/issues/2481"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:d9329c38-b05c-78ad-be68-213beaac9ae0 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | C12E:3FE5AD:3B24B36:4FD3C0B:6970840F |
| html-safe-nonce | 50002019ce3cd96eaf4b3c24a31f6bfcafc4ee073e514bff13d05cc738ba7cc7 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDMTJFOjNGRTVBRDozQjI0QjM2OjRGRDNDMEI6Njk3MDg0MEYiLCJ2aXNpdG9yX2lkIjoiNzA4ODM2Nzg5NDg0MzY1NTE4MyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | b7a509c3d20cc69ea6dda31e0c292fb174ef8090ce3ecf571b6e822cde5d74b8 |
| hovercard-subject-tag | issue:2580451760 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/pythonnet/pythonnet/2481/issue_layout |
| twitter:image | https://opengraph.githubassets.com/2b0f6ee8403a65d080d7f9f3fbb503d0812d5cfd16a99ee0d5ac4840e371ed0f/pythonnet/pythonnet/issues/2481 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/2b0f6ee8403a65d080d7f9f3fbb503d0812d5cfd16a99ee0d5ac4840e371ed0f/pythonnet/pythonnet/issues/2481 |
| og:image:alt | Environment Pythonnet version: 3.0.4 Python version: 3.11.9 Operating System: Windows 11 Pro .NET Runtime: .NET Core 8 Details When assemblies are dynamically loaded in .NET, PythonNet assembly loa... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | acidbubbles |
| hostname | github.com |
| expected-hostname | github.com |
| None | 9920a62ba22d06470388e2904804fb7e5ec51c9e35f81784e9191394c74b2bd2 |
| turbo-cache-control | no-preview |
| go-import | github.com/pythonnet/pythonnet git https://github.com/pythonnet/pythonnet.git |
| octolytics-dimension-user_id | 6050430 |
| octolytics-dimension-user_login | pythonnet |
| octolytics-dimension-repository_id | 14748123 |
| octolytics-dimension-repository_nwo | pythonnet/pythonnet |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 14748123 |
| octolytics-dimension-repository_network_root_nwo | pythonnet/pythonnet |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 7d6181066430cc06553c8396ca201e194ae33cb9 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width