Summary: | Deadlock on startup while computing namelookup | ||
---|---|---|---|
Product: | [Eclipse Project] JDT | Reporter: | Philipe Mulet <philippe_mulet> |
Component: | Core | Assignee: | Jerome Lanneluc <jerome_lanneluc> |
Status: | VERIFIED FIXED | QA Contact: | |
Severity: | normal | ||
Priority: | P3 | CC: | eclipse |
Version: | 3.1 | ||
Target Milestone: | 3.1 M7 | ||
Hardware: | PC | ||
OS: | Windows XP | ||
Whiteboard: |
Description
Philipe Mulet
2005-04-19 05:59:56 EDT
Ignoring initial classloader circularity (could be a PDE issue), problem comes from interference between one editor reconciling while package explorer is being rendered. Reconcile - lock on projectElementInfo (to compute namelookup) - initializes classpath - calls out client CP initializer - execute operation which needs resource lock --> WAIT Main (pkg explorer) - takes resource lock - initializes classpath - attempt to lock on projectElementInfo to reset pkg fragment roots cache - DEADLOCK No 3rd party code should run within our projectElementInfo lock. Proposal is to stop synchronizing namelookup creation. Changed JavaProjectElementInfo to use a member class (ProjectCache) to store the allPackageFragmentRootsCache, allPackageFragmentsCache, and pathToResolvedEntries. This cache is reset at once (by nulling the projectCache field), and it is initialized at once (in getProjectCache()). No need to synchronize these methods any longer. Verified for 3.1 M7 using build I20050509-2010 + jdt.core HEAD. |