mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-11 11:36:59 +07:00
Previous synchronization of background updates in PythonSdkUpdater was flawed. It didn't prevent us from launching several concurrent updates for the same SDK, but only blocked subsequent refresh tasks on a BlockingSet, still showing the corresponding progress indicators, piling up threads and exhausting system resources. The new implementation attempts to enforce the following policy: no two updates for the same SDK can be run concurrently, and all subsequent updates for an SDK already being refreshed are squashed and queued to be executed once it finished. We also adjusted PythonSdkUpdater interface to better indicate synchronization of individual methods. The old update() method, which performed a few of update operations in a blocking fashion, is now deprecated and replaced with more explicit scheduleUpdate(), always asynchronous, and internal updateVersionAndPathsSynchronouslyAndScheduleRemaining() that replicates the old behavior for the time being due to a number of existing usages, but is to be revised. Synchronous version and paths refreshes are now performed under a modal progress indicator. The legacy updating mechanism can be restored as a fallback if "python.use.new.sdk.updater" Registry flag is reset. Additionally, internal PyUpdateProjectSdk action was added for diagnostic. These changes are a result of a joint effort with Alexey Kniazev. GitOrigin-RevId: 6260cda7a22c4f5932f7d78eb6660a50e2b972b6