Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 501681

Summary: Deadlock in WorkbenchErrorHandler.handle
Product: [Eclipse Project] Platform Reporter: Aurelien Pupier <apupier>
Component: UIAssignee: Andrey Loskutov <loskutov>
Status: VERIFIED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: daniel_megert, Lars.Vogel, loskutov, manoj.palat, sxenos
Version: 4.6Flags: sxenos: review+
Lars.Vogel: review+
Target Milestone: 4.6.2   
Hardware: All   
OS: All   
See Also: https://git.eclipse.org/r/81517
https://git.eclipse.org/r/81663
https://git.eclipse.org/c/platform/eclipse.platform.ui.git/commit/?id=4a17b8684b5f45f7fad8d36e904b17fff424011f
https://git.eclipse.org/r/82388
https://git.eclipse.org/c/platform/eclipse.platform.ui.git/commit/?id=fade9db40d6ed0cfb263fa64206cbc89e3772217
Whiteboard:
Bug Depends on: 241244    
Bug Blocks:    
Attachments:
Description Flags
log the day after
none
log few days before none

Description Aurelien Pupier CLA 2016-09-19 05:39:32 EDT
I have no steps to reproduce just that my UI is completely frozen.
I have these stacks:

Name: main
State: BLOCKED on org.eclipse.jdt.internal.core.JavaModelManager@5efa9c04 owned by: Worker-32
Total blocked: 151,174  Total waited: 1,244

Stack trace: 
org.eclipse.jdt.internal.core.JavaModelManager.getInfo(JavaModelManager.java:2033)
org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:314)
org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:302)
org.eclipse.jdt.internal.core.JavaElement.getChildren(JavaElement.java:257)
org.eclipse.jdt.internal.core.JavaElement.getSourceElementAt(JavaElement.java:431)
org.eclipse.jdt.internal.core.CompilationUnit.getElementAt(CompilationUnit.java:704)
org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.getElementAt(CompilationUnitEditor.java:1222)
org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.computeHighlightRangeSourceReference(JavaEditor.java:3968)
org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.selectionChanged(JavaEditor.java:2258)
org.eclipse.jdt.internal.ui.javaeditor.JavaEditor$EditorSelectionChangedListener.selectionChanged(JavaEditor.java:303)
org.eclipse.jface.text.TextViewer.firePostSelectionChanged(TextViewer.java:2628)
org.eclipse.jface.text.TextViewer.firePostSelectionChanged(TextViewer.java:2576)
org.eclipse.jface.text.TextViewer$5.run(TextViewer.java:2555)
org.eclipse.swt.widgets.Display.runTimer(Display.java:4329)
org.eclipse.swt.widgets.Display.messageProc(Display.java:3418)
org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2552)
org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3814)
org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1121)
org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1022)
org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:150)
org.eclipse.ui.internal.Workbench$5.run(Workbench.java:687)
org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:604)
org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:138)
org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:673)
org.eclipse.equinox.launcher.Main.basicRun(Main.java:610)
org.eclipse.equinox.launcher.Main.run(Main.java:1519)

Name: Worker-1
State: BLOCKED on org.eclipse.jdt.internal.core.JavaModelManager@5efa9c04 owned by: Worker-32
Total blocked: 20,085  Total waited: 16,882

Stack trace: 
org.eclipse.jdt.internal.core.JavaModelManager.getInfo(JavaModelManager.java:2033)
org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:314)
org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:302)
org.eclipse.jdt.internal.core.JavaElement.exists(JavaElement.java:220)
org.eclipse.jdt.internal.debug.ui.BreakpointUtils.getMember(BreakpointUtils.java:148)
org.eclipse.jdt.internal.debug.ui.JDIModelPresentation.getLineBreakpointText(JDIModelPresentation.java:1603)
org.eclipse.jdt.internal.debug.ui.JDIModelPresentation.getBreakpointText(JDIModelPresentation.java:1508)
org.eclipse.jdt.internal.debug.ui.JDIModelPresentation.getText(JDIModelPresentation.java:228)
org.eclipse.debug.internal.ui.LazyModelPresentation.getText(LazyModelPresentation.java:191)
org.eclipse.debug.internal.ui.DelegatingModelPresentation.getText(DelegatingModelPresentation.java:162)
org.eclipse.jdt.internal.debug.ui.JavaDebugOptionsManager$2.run(JavaDebugOptionsManager.java:748)
org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2240)
org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2267)
org.eclipse.jdt.internal.debug.ui.JavaDebugOptionsManager.updateBreakpointMessages(JavaDebugOptionsManager.java:763)
org.eclipse.jdt.internal.debug.ui.JavaDebugOptionsManager.breakpointsChanged(JavaDebugOptionsManager.java:778)
org.eclipse.debug.internal.core.BreakpointManager$BreakpointsNotifier.run(BreakpointManager.java:1115)
org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
org.eclipse.debug.internal.core.BreakpointManager$BreakpointsNotifier.notify(BreakpointManager.java:1135)
org.eclipse.debug.internal.core.BreakpointManager.fireUpdate(BreakpointManager.java:980)
org.eclipse.debug.internal.core.BreakpointManager.access$4(BreakpointManager.java:967)
org.eclipse.debug.internal.core.BreakpointManager$BreakpointManagerVisitor.update(BreakpointManager.java:789)
org.eclipse.debug.internal.core.BreakpointManager.resourceChanged(BreakpointManager.java:699)
org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:299)
org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:289)
org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:152)
org.eclipse.core.internal.resources.Workspace.broadcastBuildEvent(Workspace.java:360)
org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:147)
org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:235)
org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)


Name: Worker-32
State: TIMED_WAITING on org.eclipse.ui.internal.Semaphore@48e03e2b
Total blocked: 21,800  Total waited: 18,282

Stack trace: 
java.lang.Object.wait(Native Method)
org.eclipse.ui.internal.Semaphore.acquire(Semaphore.java:43)
org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:164)
org.eclipse.swt.widgets.Display.syncExec(Display.java:4813)
org.eclipse.ui.statushandlers.WorkbenchErrorHandler.handle(WorkbenchErrorHandler.java:52)
org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler.handle(IDEWorkbenchErrorHandler.java:101)
org.eclipse.ui.internal.WorkbenchErrorHandlerProxy.handle(WorkbenchErrorHandlerProxy.java:31)
org.eclipse.ui.statushandlers.StatusManager.handle(StatusManager.java:189)
org.eclipse.ui.statushandlers.StatusManager.handle(StatusManager.java:231)
org.eclipse.ui.statushandlers.StatusManager$StatusManagerLogListener.logging(StatusManager.java:302)
org.eclipse.core.internal.runtime.RuntimeLog.logToListeners(RuntimeLog.java:161)
org.eclipse.core.internal.runtime.PlatformLogWriter.logged(PlatformLogWriter.java:103)
org.eclipse.osgi.internal.log.ExtendedLogReaderServiceFactory.safeLogged(ExtendedLogReaderServiceFactory.java:88)
org.eclipse.osgi.internal.log.ExtendedLogReaderServiceFactory.logPrivileged(ExtendedLogReaderServiceFactory.java:217)
org.eclipse.osgi.internal.log.ExtendedLogReaderServiceFactory.log(ExtendedLogReaderServiceFactory.java:189)
org.eclipse.osgi.internal.log.ExtendedLogServiceFactory.log(ExtendedLogServiceFactory.java:65)
org.eclipse.osgi.internal.log.ExtendedLogServiceImpl.log(ExtendedLogServiceImpl.java:87)
org.eclipse.osgi.internal.log.LoggerImpl.log(LoggerImpl.java:54)
org.eclipse.core.internal.runtime.PlatformLogWriter.logging(PlatformLogWriter.java:44)
org.eclipse.core.internal.runtime.RuntimeLog.log(RuntimeLog.java:97)
org.eclipse.core.internal.content.ContentType.log(ContentType.java:125)
org.eclipse.core.internal.content.ContentType.invalidateDescriber(ContentType.java:490)
org.eclipse.core.internal.content.ContentType.describe(ContentType.java:166)
org.eclipse.core.internal.content.ContentType.internalGetDescriptionFor(ContentType.java:446)
org.eclipse.core.internal.content.ContentTypeCatalog.getDescriptionFor(ContentTypeCatalog.java:367)
org.eclipse.core.internal.content.ContentTypeCatalog.getDescriptionFor(ContentTypeCatalog.java:371)
org.eclipse.core.internal.content.ContentTypeMatcher.getDescriptionFor(ContentTypeMatcher.java:76)
org.eclipse.core.internal.resources.ContentDescriptionManager.readDescription(ContentDescriptionManager.java:453)
org.eclipse.core.internal.resources.ContentDescriptionManager.getDescriptionFor(ContentDescriptionManager.java:363)
org.eclipse.core.internal.resources.File.internalGetCharset(File.java:241)
org.eclipse.core.internal.resources.File.getCharset(File.java:198)
org.eclipse.core.internal.resources.File.getCharset(File.java:186)
org.eclipse.jdt.internal.core.util.Util.getResourceContentsAsCharArray(Util.java:1159)
org.eclipse.jdt.internal.core.CompilationUnit.openBuffer(CompilationUnit.java:1160)
   - locked org.eclipse.jdt.internal.core.BufferManager@5df1dc09
org.eclipse.jdt.internal.core.Openable.getBuffer(Openable.java:289)
org.eclipse.jdt.internal.core.Openable.hasUnsavedChanges(Openable.java:368)
org.eclipse.jdt.internal.core.Openable.canBeRemovedFromCache(Openable.java:72)
org.eclipse.jdt.internal.core.CompilationUnit.canBeRemovedFromCache(CompilationUnit.java:236)
org.eclipse.jdt.internal.core.ElementCache.close(ElementCache.java:46)
org.eclipse.jdt.internal.core.OverflowingLRUCache.privateRemoveEntry(OverflowingLRUCache.java:278)
org.eclipse.jdt.internal.core.OverflowingLRUCache.makeSpace(OverflowingLRUCache.java:181)
org.eclipse.jdt.internal.core.OverflowingLRUCache.put(OverflowingLRUCache.java:344)
org.eclipse.jdt.internal.core.JavaModelCache.putInfo(JavaModelCache.java:230)
org.eclipse.jdt.internal.core.JavaModelManager.putInfos(JavaModelManager.java:3841)
   - locked org.eclipse.jdt.internal.core.JavaModelManager@5efa9c04
org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:593)
org.eclipse.jdt.internal.core.BinaryType.getElementInfo(BinaryType.java:287)
org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:302)
org.eclipse.jdt.internal.core.SearchableEnvironment.find(SearchableEnvironment.java:115)
org.eclipse.jdt.internal.core.SearchableEnvironment.findType(SearchableEnvironment.java:294)
org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:151)
org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.java:101)
org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType(BinaryTypeBinding.java:212)
org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.superInterfaces(BinaryTypeBinding.java:1905)
org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.resolve(HierarchyResolver.java:612)
org.eclipse.jdt.internal.core.hierarchy.HierarchyBuilder.buildSupertypes(HierarchyBuilder.java:116)
org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.build(IndexBasedHierarchyBuilder.java:151)
org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.compute(TypeHierarchy.java:315)
org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.refresh(TypeHierarchy.java:1286)
   - locked org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy@95f3b63
org.eclipse.jdt.internal.core.CreateTypeHierarchyOperation.executeOperation(CreateTypeHierarchyOperation.java:90)
org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:724)
org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:790)
org.eclipse.jdt.internal.core.BinaryType.newSupertypeHierarchy(BinaryType.java:826)
org.eclipse.jdt.internal.core.BinaryType.newSupertypeHierarchy(BinaryType.java:778)
org.eclipse.recommenders.internal.types.rcp.ProjectTypesIndex.indexType(ProjectTypesIndex.java:409)
org.eclipse.recommenders.internal.types.rcp.ProjectTypesIndex.rebuildRoot(ProjectTypesIndex.java:358)
org.eclipse.recommenders.internal.types.rcp.ProjectTypesIndex.rebuild(ProjectTypesIndex.java:345)
   - locked org.eclipse.recommenders.internal.types.rcp.ProjectTypesIndex@302d054e
org.eclipse.recommenders.internal.types.rcp.ProjectTypesIndex$2.doRun(ProjectTypesIndex.java:321)
org.eclipse.recommenders.internal.types.rcp.ProjectTypesIndex$2.run(ProjectTypesIndex.java:312)
org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Comment 1 Manoj N Palat CLA 2016-09-20 09:13:26 EDT
From the stacktrace, the Worker 32 calls JMM.putInfos() which has locked and worker 1 and main are waiting at JMM.getInfo() to unlock. The last part of worker 32 has the following ST:
java.lang.Object.wait(Native Method)
org.eclipse.ui.internal.Semaphore.acquire(Semaphore.java:43)
org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:164)
org.eclipse.swt.widgets.Display.syncExec(Display.java:4813)

Moving to ui for comments.
Comment 2 Lars Vogel CLA 2016-09-20 09:31:51 EDT
Adding Andrey, our "deadlock solving expert".
Comment 3 Andrey Loskutov CLA 2016-09-20 09:55:12 EDT
Can we have a *full* thread dump please (as attachment)? I must confess, the unusual stack format confuses me.

Beside this this seem to be a classical deadlock. main waits on Worker-32, Worker-32 waits on main. The root problem starts at main, where JavaModelManager.getInfo (guarded by a lock on JavaModelManager) is accessed from UI thread (implicit lock on UI is taken and the next one on JavaModelManager can't be acquired). So the main waits on a job. 

The misery continues with the Worker-32 job, which gets an exception in ContentType.describe() and that code logs an exception, which the WorkbenchErrorHandler decides to show via Display.syncExec => kaboom, deadlock is perfect.

I wonder why WorkbenchErrorHandler is allowed to run syncExec from a non UI context (I see this was added via bug 241244 in commit 1904f477320dac4a9f4d45f7be478efba4a0b735). This is highly dangerous. I will check this.
Comment 4 Aurelien Pupier CLA 2016-09-20 09:58:15 EDT
Hi Andrey,

sorry, not possible to provide you the full thread stack. I extracted the interesting part of the stacks and forget to create the full thread stack after.
It happened only one time, I don't know how to reproduce the issue.
Comment 5 Andrey Loskutov CLA 2016-09-20 10:25:13 EDT
The concrete problem manifestation could be probably "fixed" by changing org.eclipse.core.internal.content.ContentType.describe(IContentDescriber, ILazySource, ContentDescription) implementation NOT to log *any* Error like below but throw "new IllegalStateException(e)" in the code below:

		} catch (Error e) {
			// describer got some serious problem. disable it (logging the reason) and throw the error again
			invalidateDescriber(e);
			throw e;
		}

because org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler.handle(StatusAdapter, int) converts any innocent "log" to a *blocking* call to Display.syncExec on any OutOfMemoryError, StackOverflowError, VirtualMachineError or SWTError.

The root cause is however, the fix for bug 241244 (on WorkbenchErrorHandler) which has a great potential for deadlocks. IMHO the bug 241244 should be reopened and fix reverted, because it introduces much severe problems as it supposes to fix.
Comment 6 Andrey Loskutov CLA 2016-09-20 17:14:36 EDT
I think I have an idea.
Comment 7 Eclipse Genie CLA 2016-09-20 17:21:39 EDT
New Gerrit change created: https://git.eclipse.org/r/81517
Comment 8 Stefan Xenos CLA 2016-09-21 10:36:20 EDT
There are some problems with the attached patch:

1. It creates extra threads, which is expensive.
2. It conditionally changes syncExecs into asyncExecs based on activity on other threads. If the caller was relying upon the blocking behavior as an invariant, that invariant is broken.

I would like to suggest an alternative: Unconditionally replace the syncExec with asyncExec.

This is simpler and more efficient than the proposed conditional approach, it's no more breaking than the current approach due to 2), above... and if it does cause breakage, those breakages will be much easier to reproduce and write tests for since they won't depend on the activity of other threads.

In other words, I agree with your initial assessment that the patch for bug 241244 is the root cause and should be reverted.
Comment 9 Stefan Xenos CLA 2016-09-21 10:47:11 EDT
Re: comment 5

I think that calling invalidateDescriber is appropriate since the framework wants to disable buggy describers such that they don't generate further errors.

However:

IDEWorkbenchErrorHandler.handle is probably being too greedy in appending the blocking flag to error statuses. The purpose of adding the BLOCKING status is to ensure that the user will still see the error message if an error occurs which is so serious that it is right about to cause a crash-to-desktop.

The error that occurred in this circumstance was almost certainly not that serious. We should figure out what sort of error it was and ensure that IDEWorkbenchErrorHandler.isFatal(...) returns false for it.

Aurelien, do you still have the log from the run that generated this freeze? It almost certainly logged the problematic exception immediately before the freeze.
Comment 10 Aurelien Pupier CLA 2016-09-21 11:18:38 EDT
Created attachment 264320 [details]
log the day after
Comment 11 Aurelien Pupier CLA 2016-09-21 11:19:08 EDT
Created attachment 264321 [details]
log few days before
Comment 12 Aurelien Pupier CLA 2016-09-21 11:19:38 EDT
I hit a spatiotemporal flaw...
I have log files from the 14/09/16 and for the 20/09/16 but not for the 19/09/16 when the deadlock occurred. So I attached them but I'm not sure that ti will give a lot of information.
Comment 13 Eclipse Genie CLA 2016-09-22 04:35:37 EDT
New Gerrit change created: https://git.eclipse.org/r/81663
Comment 14 Andrey Loskutov CLA 2016-09-22 04:51:14 EDT
(In reply to Stefan Xenos from comment #8)
> There are some problems with the attached patch:
> 
> 1. It creates extra threads, which is expensive.
> 2. It conditionally changes syncExecs into asyncExecs based on activity on
> other threads. If the caller was relying upon the blocking behavior as an
> invariant, that invariant is broken.

The original intent was to introduce smallest possible change, but I agree with your assessment.

> I would like to suggest an alternative: Unconditionally replace the syncExec
> with asyncExec.
> 
> This is simpler and more efficient than the proposed conditional approach,
> it's no more breaking than the current approach due to 2), above... and if
> it does cause breakage, those breakages will be much easier to reproduce and
> write tests for since they won't depend on the activity of other threads.
> 
> In other words, I agree with your initial assessment that the patch for bug
> 241244 is the root cause and should be reverted.

This should be done by https://git.eclipse.org/r/81663. I haven't reverted the entire patch, but only fixed the most dangerous part of it causing deadlocks.
Comment 16 Eclipse Genie CLA 2016-10-03 14:10:31 EDT
New Gerrit change created: https://git.eclipse.org/r/82388
Comment 17 Andrey Loskutov CLA 2016-10-03 14:20:29 EDT
(In reply to Eclipse Genie from comment #16)
> New Gerrit change created: https://git.eclipse.org/r/82388

@Stefan, do you mind to review this backport patch to 4.6.2?
@Lars: I need +1 from component lead to backport.
Comment 18 Andrey Loskutov CLA 2016-10-03 14:21:28 EDT
(In reply to Andrey Loskutov from comment #17)
> @Stefan, do you mind to review this backport patch to 4.6.2?

P.S: sorry for timing, 4.6.2 nightly build is broken so patch is not even compilable with hudson.
Comment 19 Stefan Xenos CLA 2016-10-03 14:29:44 EDT
> @Stefan, do you mind to review this backport patch to 4.6.2?

Yes. Do it. I added a +1 review flag in bugzilla. Do I need to do anything else?
Comment 20 Andrey Loskutov CLA 2016-10-03 14:51:59 EDT
(In reply to Stefan Xenos from comment #19)
> > @Stefan, do you mind to review this backport patch to 4.6.2?
> 
> Yes. Do it. I added a +1 review flag in bugzilla. Do I need to do anything
> else?

I think I need +1 *on the patch* from you and +1 from Lars (or other platform UI lead) on this bug.
Comment 22 Andrey Loskutov CLA 2016-11-18 03:46:39 EST
Verified on Win 7/Linux 64 with build id: M20161116-1100 by looking on the source code of WorkbenchErrorHandler and test results containing the new "testDeadlockFromBug501681" test, see http://download.eclipse.org/eclipse/downloads/drops4/M20161116-1100/testresults/html/org.eclipse.ui.tests_ep46M-unit-lin64_linux.gtk.x86_64_8.0.html.
Comment 23 Dani Megert CLA 2016-11-23 05:18:21 EST
(In reply to Eclipse Genie from comment #21)
> Gerrit change https://git.eclipse.org/r/82388 was merged to
> [R4_6_maintenance].
> Commit:
> http://git.eclipse.org/c/platform/eclipse.platform.ui.git/commit/?id=fade9db40d6ed0cfb263fa64206cbc89e3772217
> 

Increasing the minor segment was wrong. The version was already correct since its service segment got increased for 4.6.2.
Comment 24 Dani Megert CLA 2016-11-23 07:57:23 EST
(In reply to Dani Megert from comment #23)
> (In reply to Eclipse Genie from comment #21)
> > Gerrit change https://git.eclipse.org/r/82388 was merged to
> > [R4_6_maintenance].
> > Commit:
> > http://git.eclipse.org/c/platform/eclipse.platform.ui.git/commit/?id=fade9db40d6ed0cfb263fa64206cbc89e3772217
> > 
> 
> Increasing the minor segment was wrong. The version was already correct
> since its service segment got increased for 4.6.2.

Tests are not considered API and hence their version follows the main bundle. See https://wiki.eclipse.org/Version_Numbering#Plug-ins_with_no_API for details.
Comment 25 Andrey Loskutov CLA 2016-11-23 08:09:14 EST
(In reply to Dani Megert from comment #24)
> Tests are not considered API and hence their version follows the main
> bundle. See https://wiki.eclipse.org/Version_Numbering#Plug-ins_with_no_API
> for details.

OK, is there anything we should do right now for 4.6.2 or for 4.6.3?
Comment 26 Dani Megert CLA 2016-11-23 09:39:42 EST
(In reply to Andrey Loskutov from comment #25)
> (In reply to Dani Megert from comment #24)
> > Tests are not considered API and hence their version follows the main
> > bundle. See https://wiki.eclipse.org/Version_Numbering#Plug-ins_with_no_API
> > for details.
> 
> OK, is there anything we should do right now for 4.6.2 or for 4.6.3?

No. Unfortunately, once a build with the wrong number is out, we can't go back. The number in master is higher than in the R4_6_maintenance, so we're OK. Once 4.6.2 is out we should consider to align the version to the "real" bundle.
Comment 27 Stefan Xenos CLA 2016-12-05 15:05:39 EST
This may have caused a regression: bug 508696
Comment 28 Stefan Xenos CLA 2016-12-05 15:07:01 EST
Note that I haven't confirmed that it is actually caused by this patch and the (possible) regression is less severe than the deadlock reported here, so I'm *not* suggesting we revert this fix even if it caused the regression.