Bug 99194 - Can't find threadsafe way to search for markers
Summary: Can't find threadsafe way to search for markers
Status: ASSIGNED
Alias: None
Product: Platform
Classification: Eclipse Project
Component: Resources (show other bugs)
Version: 3.1   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Platform-Resources-Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-06-09 12:18 EDT by Stefan Xenos CLA
Modified: 2019-09-06 16:13 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Stefan Xenos CLA 2005-06-09 12:18:13 EDT
There are currently many bugs against the problems view reporting missing
markers or markers with blank columns, none of which have steps to reproduce.
Having tried several different algorithms without success, I'm beginning to
suspect a concurrency issue in core.resources.

The scenario:
- Thread 1 (say, the UI thread) needs to read markers. This could be triggered
by the user opening a view (problems) or changing the selection criteria
(changing the selected resource, open editor, or active filter). It also may be
triggered by a resource change.
- Thread 2 (say, a build) is changing markers. It is adding, removing, and
changing markers.

The restrictions:
1. Apparently, it is possible to change markers without holding a workspace
lock. This means there is no way to lock the workspace against marker changes,
or to ensure that thread 1 isn't reading markers while thread 2 is changing them.
2. When a resource delta is recieved, there is no way to tell if this delta is
referring to changes that occurred before or after the last time thread 1 read
markers.
3. IResource.findMarkers is not atomic. According to my discussion with John, it
seems that when findMarkers returns a result that spans more than one file, the
markers in file 1 may have been collected before a change and the markers in
file 2 may have been collected afterward.

So... if there is a threadsafe algorithm for responding to marker changes (where
the filter criteria changes in one thread and marker deltas arrive in another),
please describe it. Otherwise, please provide some means to do so.

The current problems view algorithm works like this:
1. Whenever a marker delta or filter change occurs, schedule an update unless
one is already scheduled.
2. When the time comes to update, lock the workspace. While locked, search the
workspace for all markers matching the filter criteria and send the list to the
UI thread.
3. When the list arrives in the UI thread, clear the contents of the table and
replace it with the new list.
Comment 1 Eclipse Webmaster CLA 2019-09-06 16:13:58 EDT
This bug hasn't had any activity in quite some time. Maybe the problem got resolved, was a duplicate of something else, or became less pressing for some reason - or maybe it's still relevant but just hasn't been looked at yet.

If you have further information on the current state of the bug, please add it. The information can be, for example, that the problem still occurs, that you still want the feature, that more information is needed, or that the bug is (for whatever reason) no longer relevant.