Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 364482 - A race condition could occur in Server code
Summary: A race condition could occur in Server code
Status: RESOLVED FIXED
Alias: None
Product: WTP ServerTools
Classification: WebTools
Component: wst.server (show other bugs)
Version: unspecified   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.2.5 P   Edit
Assignee: Elson Yuen CLA
QA Contact: Elson Yuen CLA
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-11-22 10:57 EST by Christine CLA
Modified: 2017-10-11 16:37 EDT (History)
1 user (show)

See Also:


Attachments
A patch to fix this rating issue. (11.04 KB, patch)
2011-12-08 09:27 EST, Christine CLA
eyuen7: iplog+
Details | Diff
v1.0 (7.71 KB, patch)
2012-01-25 14:56 EST, Elson Yuen CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Christine CLA 2011-11-22 10:57:41 EST
Build Identifier: 

Server.clearModuleCache() set modules to null, a NPE could occur during Server.getModules() call in a multi-thread condition. Should put them in a synchronized block. 

Stacktrace:
[17-Oct-2011 13:54:57.843 EDT] 00000001 bpmHist       E [com.ibm.wbit.ui.GeneralUITracing$6:logging(GeneralUITracing.java:270)] FROM_ECLIPSE_ERROR_LOG Problems occurred when invoking code from plug-in: "org.eclipse.ui.navigator". NullPointerException(null) Details...
java.lang.NullPointerException
    at org.eclipse.wst.server.core.internal.Server.getModules(Server.java:2438)
    at org.eclipse.wst.server.ui.internal.cnf.ServerContentProvider.hasChildren(ServerContentProvider.java:96)
    at org.eclipse.ui.internal.navigator.extensions.SafeDelegateTreeContentProvider.hasChildren(SafeDelegateTreeContentProvider.java:110)
    at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.callNormalHasChildren(NavigatorContentServiceContentProvider.java:428)
    at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.access$4(NavigatorContentServiceContentProvider.java:423)
    at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider$3.run(NavigatorContentServiceContentProvider.java:393)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren(NavigatorContentServiceContentProvider.java:379)
    at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren(NavigatorContentServiceContentProvider.java:420)
    at org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable(AbstractTreeViewer.java:2082)
    at org.eclipse.jface.viewers.TreeViewer.isExpandable(TreeViewer.java:588)
    at org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable(AbstractTreeViewer.java:2112)
    at org.eclipse.jface.viewers.AbstractTreeViewer.updatePlus(AbstractTreeViewer.java:2794)
    at org.eclipse.jface.viewers.TreeViewer.updatePlus(TreeViewer.java:852)
    at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1832)
    at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1799)
    at org.eclipse.ui.navigator.CommonViewer.internalRefresh(CommonViewer.java:561)
    at org.eclipse.jface.viewers.StructuredViewer$8.run(StructuredViewer.java:1514)
    at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1422)
    at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:403)
    at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1383)
    at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1512)
    at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:548)
    at org.eclipse.ui.navigator.CommonViewer.refresh(CommonViewer.java:350)
    at org.eclipse.wst.server.ui.internal.cnf.ServersView2$4.run(ServersView2.java:160)
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134)
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4041)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3660)
    at org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.runEventLoop(EventLoopProgressMonitor.java:123)
    at org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.isCanceled(EventLoopProgressMonitor.java:97)
    at org.eclipse.core.internal.jobs.ThreadJob.isCanceled(ThreadJob.java:146)
    at org.eclipse.core.internal.jobs.ThreadJob.waitForRun(ThreadJob.java:235)
    at org.eclipse.core.internal.jobs.ThreadJob.joinRun(ThreadJob.java:199)
    at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:92)
    at org.eclipse.core.internal.jobs.JobManager.beginRule(JobManager.java:286)
    at org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:117)
    at org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:1914)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1970)
    at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118)
    at com.ibm.wbit.ui.bpmrepository.operations.MaintainDefaultLibraryDependencies.changeDefaultLibraryDependencies(MaintainDefaultLibraryDependencies.java:215)
    at com.ibm.wbit.ui.bpmrepository.operations.MaintainDefaultLibraryDependencies.addDefaultLibraryDependencies(MaintainDefaultLibraryDependencies.java:138)
    at com.ibm.wbit.ui.bpmrepository.actions.InternalBringIntoWIDAction.run(InternalBringIntoWIDAction.java:373)
    at com.ibm.wbit.ui.bpmrepository.utils.ProcessCenterProjectUtils.bringInWLEProjectSnapshot(ProcessCenterProjectUtils.java:190)
    at com.ibm.wbit.ui.bpmrepository.utils.ProcessCenterProjectUtils.bringIn(ProcessCenterProjectUtils.java:163)
    at com.ibm.wbit.ui.bpmrepository.utils.ProcessCenterProjectUtils.bringIn(ProcessCenterProjectUtils.java:144)
    at com.ibm.wbit.ui.bpmrepository.utils.ProcessCenterProjectUtils.bringIn(ProcessCenterProjectUtils.java:139)
    at com.ibm.wbit.ui.bpmrepository.utils.ProcessCenterProjectUtils.bringIn(ProcessCenterProjectUtils.java:129)
    at com.ibm.wbit.ui.bpmrepository.utils.EmbeddedPCConsoleAPIs.bringInWID(EmbeddedPCConsoleAPIs.java:276)
    at com.ibm.wbit.ui.bpmrepository.utils.EmbeddedPCConsoleAPIs.bringInWID(EmbeddedPCConsoleAPIs.java:84)
    at com.ibm.wbit.ui.internal.processcenterview.ProcessCenterJavaScriptHandler$2.function(ProcessCenterJavaScriptHandler.java:53)
    at org.eclipse.swt.browser.WebSite.Invoke(WebSite.java:749)
    at org.eclipse.swt.browser.WebSite$7.method6(WebSite.java:129)
    at org.eclipse.swt.internal.ole.win32.COMObject.callback6(COMObject.java:119)
    at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
    at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2459)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3655)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
    at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:611)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1408)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1384)

Reproducible: Sometimes

Steps to Reproduce:
Programmatically execute the following steps:
1. Import project A and publish it to a running Server (Auto publish is turned off, and non-loose config is selected);
2. Delete project A from workspace, (it will be removed from the Server too);
3. Import project A' (project A with modifications) and add it to the Server;
Comment 1 Christine CLA 2011-12-08 09:27:23 EST
Created attachment 208094 [details]
A patch to fix this rating issue.
Comment 2 Elson Yuen CLA 2012-01-23 14:32:11 EST
In org.eclipse.wst.server.core.internal.ServerWorkingCopy.modifyModules(IModule[], IModule[], IProgressMonitor), you switched from getModules() call to what seems to be a copy of the code within that method.  Is there any reason why you need to clone the code instead of calling getModules() as before?
Comment 3 Elson Yuen CLA 2012-01-25 14:56:51 EST
Created attachment 210079 [details]
v1.0

Update the patch based on the original that address the duplicate code problem on my previous comment.
Comment 4 Elson Yuen CLA 2012-01-25 15:06:51 EST
Code released to 33M and HEAD
Comment 5 Christine CLA 2012-01-25 17:57:04 EST
Test impact:

Have tested the following scenarios:
1. Publish and unpublish an ear file on an adopter server;
2. Remove and add a J2EE module on a published application on an adopter server;
3. Publish and unpublish web projects on TomCat 7.0 server;
Comment 6 Carl Anderson CLA 2012-01-26 17:27:21 EST
Committed to R3_2_5_patches
Comment 7 Eclipse Genie CLA 2017-10-11 16:37:54 EDT
New Gerrit change created: https://git.eclipse.org/r/109092