commit | bdcadc11af97a1300195f614550a9c0211c19faa | [log] [tgz] |
---|---|---|
author | Andrey Loskutov <loskutov@gmx.de> | Tue Mar 31 15:22:08 2020 +0200 |
committer | Andrey Loskutov <loskutov@gmx.de> | Tue Mar 31 11:44:23 2020 -0400 |
tree | 601352fa920a6f26b20b2bc934850a0ad763dc51 | |
parent | 1ebbfb497df26b9bdc3937ee7746268a0ed923f5 [diff] |
Bug 551676 - avoid stack overflow on working set updater restore With the changes from commit f638d309e065aa92f1b3616728e174b5ed7c4488 we may run into endless loop if the IPropertyChangeListener installed on AbstractWorkingSetManager trigger working set API's during working set restore operation. The recursion is possible because the current working set design has a major flaw - it allows events to be triggered on not yet fully created working sets (see bug 479217). The recursion is possible via this call stack: WorkingSet.restoreWorkingSet(WorkingSet.java:151) AbstractWorkingSet.getElementsArray(AbstractWorkingSet.java:166) AbstractWorkingSet.isEmpty(AbstractWorkingSet.java:200) BAD_CLIENT.propertyChange() AbstractWorkingSetManager$5.run(AbstractWorkingSetManager.java:378) AbstractWorkingSetManager.firePropertyChange(AbstractWorkingSetManager.java:391) AbstractWorkingSetManager.getUpdater(AbstractWorkingSetManager.java:725) WorkingSet.getUpdater(WorkingSet.java:314) WorkingSet.restoreWorkingSet(WorkingSet.java:151) To avoid the recursion on restore, we fix the getUpdater() so that it remembers just created working set *before* sending an event to the listeners. This way the next call to getUpdater() will return already created instance, instead of creating new one, and recursion does not occure. Change-Id: Ibd2ce63dbf4497b403f83aa6a88a17747c18c629 Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Thanks for your interest in this project.
Platform UI provides the basic building blocks for user interfaces built with Eclipse.
Some of these form the Eclipse Rich Client Platform (RCP) and can be used for arbitrary rich client applications, while others are specific to the Eclipse IDE. The Platform UI codebase is built on top of the Eclipse Standard Widget Toolkit (SWT), which is developed as an independent project.
Website: http://www.eclipse.org/platform/ui/
For more information, refer to the Platform UI wiki page.
Contributions to Platform UI are most welcome. There are many ways to contribute, from entering high quality bug reports, to contributing code or documentation changes. For a complete guide, see the Platform UI - How to contribute wiki page page on the team wiki.
Several test plug-ins have a dependency to the Mockito and Hamcrest libraries. Please install them from the Orbit Download page]3:
Currently the following plug-ins are required:
You need Maven 3.3.1 installed. After this you can run the build via the following command:
mvn clean verify -Pbuild-individual-bundles
Information regarding source code management, builds, coding standards, and more.
Before your contribution can be accepted by the project, you need to create and electronically sign the Eclipse Foundation Contributor License Agreement (CLA).
This project uses Bugzilla to track ongoing development and issues.
Be sure to search for existing bugs before you create another one. Remember that contributions are always welcome!
Contact the project developers via the project's “dev” list.