Community
Participate
Working Groups
I had my firewall enabled 1) switch to the install/update perspective 2) add a site bookmark for the eclipse update site 3) expand Eclipse SDK 2.0.2 4) turned off the firewall the progress got stuck and there is no way to cancel the operation. The thread dump is attached below. I had to kill eclipse. I suggest to use a ProgressMonitorDialog with forked=true this will allow you to cancel the operation. It will not be as nice as the status line. D:\eclipse\20030205\eclipse>d:\jdk1.4.1\bin\java -ms30M -mx300M -verify -cp star tup.jar org.eclipse.core.launcher.Main -consolelog -application org.eclipse.ui.w orkbench -data d:\eclipse\ws0321\plugins Full thread dump Java HotSpot(TM) Client VM (1.4.1-beta-b14 mixed mode): "ModalContext" prio=5 tid=0x19F98500 nid=0x774 runnable [1ae2f000..1ae2fd88] at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305) - locked <029DC6F8> (a java.net.PlainSocketImpl) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158) at java.net.Socket.connect(Socket.java:426) at java.net.Socket.connect(Socket.java:376) at sun.net.NetworkClient.doConnect(NetworkClient.java:139) at sun.net.www.http.HttpClient.openServer(HttpClient.java:386) at sun.net.www.http.HttpClient.openServer(HttpClient.java:602) - locked <029DC3D8> (a sun.net.www.http.HttpClient) at sun.net.www.http.HttpClient.<init>(HttpClient.java:303) at sun.net.www.http.HttpClient.<init>(HttpClient.java:264) at sun.net.www.http.HttpClient.New(HttpClient.java:336) at sun.net.www.http.HttpClient.New(HttpClient.java:317) at sun.net.www.http.HttpClient.New(HttpClient.java:312) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConne ction.java:474) at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection .java:465) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLCon nection.java:567) - locked <029DC180> (a sun.net.www.protocol.http.HttpURLConnection) at org.eclipse.update.internal.core.Response.getInputStream(Response.jav a:42) at org.eclipse.update.core.ContentReference.getInputStream(ContentRefere nce.java:129) at org.eclipse.update.core.FeatureContentProvider.asLocalReference(Featu reContentProvider.java:181) - locked <0520E950> (a java.lang.Object) at org.eclipse.update.internal.core.FeaturePackagedContentProvider.getFe atureEntryArchiveReferences(FeaturePackagedContentProvider.java:139) at org.eclipse.update.internal.core.FeaturePackagedContentProvider.getFe atureManifestReference(FeaturePackagedContentProvider.java:62) at org.eclipse.update.internal.core.FeaturePackagedFactory.createFeature (FeaturePackagedFactory.java:33) at org.eclipse.update.core.Site.createFeature(Site.java:507) at org.eclipse.update.core.FeatureReference.createFeature(FeatureReferen ce.java:108) at org.eclipse.update.core.FeatureReference.getFeature(FeatureReference. java:96) at org.eclipse.update.core.FeatureReference.getFeature(FeatureReference. java:83) at org.eclipse.update.internal.ui.model.FeatureReferenceAdapter.getFeatu re(FeatureReferenceAdapter.java:25) at org.eclipse.update.internal.ui.model.SiteCategory$2.run(SiteCategory. java:121) at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(Modal Context.java:95) "org.eclipse.pde.internal.ui.editor.manifest.NotifyingReconciler" daemon prio=2 tid=0x19CC3008 nid=0x770 in Object.wait() [1a72f000..1a72fd88] at java.lang.Object.wait(Native Method) - waiting on <0516F870> (a org.eclipse.jface.text.reconciler.DirtyRegion Queue) at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread .run(AbstractReconciler.java:161) - locked <0516F870> (a org.eclipse.jface.text.reconciler.DirtyRegionQueu e) "Java indexing" daemon prio=4 tid=0x198D6918 nid=0x508 waiting on condition [1a6 9f000..1a69fd88] at java.lang.Thread.sleep(Native Method) at org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobMan ager.java:334) at java.lang.Thread.run(Thread.java:536) "Signal Dispatcher" daemon prio=10 tid=0x0023EDD0 nid=0x720 waiting on condition [0..0] "Finalizer" daemon prio=9 tid=0x00883C10 nid=0x6c0 in Object.wait() [197af000..1 97afd88] at java.lang.Object.wait(Native Method) - waiting on <0409B788> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111) - locked <0409B788> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) "Reference Handler" daemon prio=10 tid=0x0085DE40 nid=0x76c in Object.wait() [19 76f000..1976fd88] at java.lang.Object.wait(Native Method) - waiting on <0409B7F0> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:426) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:113) - locked <0409B7F0> (a java.lang.ref.Reference$Lock) "main" prio=5 tid=0x00234B40 nid=0x5d4 runnable [6e000..6fc3c] at org.eclipse.swt.internal.win32.OS.WaitMessage(Native Method) at org.eclipse.swt.widgets.Display.sleep(Display.java:1981) at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(Mod alContext.java:131) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:255) at org.eclipse.jface.window.ApplicationWindow$1.run(ApplicationWindow.ja va:433) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:65) at org.eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.java :430) at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:1283 ) at org.eclipse.update.internal.ui.model.SiteCategory.touchFeatures(SiteC ategory.java:135) at org.eclipse.update.internal.ui.views.UpdatesView$SiteProvider.getChil dren(UpdatesView.java:205) at org.eclipse.jface.viewers.AbstractTreeViewer.getRawChildren(AbstractT reeViewer.java:637) at org.eclipse.jface.viewers.StructuredViewer.getFilteredChildren(Struct uredViewer.java:454) at org.eclipse.jface.viewers.StructuredViewer.getSortedChildren(Structur edViewer.java:555) at org.eclipse.jface.viewers.AbstractTreeViewer$1.run(AbstractTreeViewer .java:280) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:65) at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractT reeViewer.java:268) at org.eclipse.jface.viewers.AbstractTreeViewer.handleTreeExpand(Abstrac tTreeViewer.java:680) at org.eclipse.jface.viewers.AbstractTreeViewer$4.treeExpanded(AbstractT reeViewer.java:692) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java: 173) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:77) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:836) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:861) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:845) at org.eclipse.swt.widgets.Tree.wmNotifyChild(Tree.java:1837) at org.eclipse.swt.widgets.Control.WM_NOTIFY(Control.java:3767) at org.eclipse.swt.widgets.Composite.WM_NOTIFY(Composite.java:638) at org.eclipse.swt.widgets.Control.windowProc(Control.java:2803) at org.eclipse.swt.widgets.Display.windowProc(Display.java:2198) at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method) at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:1225) at org.eclipse.swt.widgets.Tree.callWindowProc(Tree.java:152) at org.eclipse.swt.widgets.Tree.WM_LBUTTONDOWN(Tree.java:1466) at org.eclipse.swt.widgets.Control.windowProc(Control.java:2786) at org.eclipse.swt.widgets.Display.windowProc(Display.java:2198) at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1292) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1408) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1289) at org.eclipse.ui.internal.Workbench.run(Workbench.java:1272) at org.eclipse.core.internal.boot.InternalBootLoader.run(InternalBootLoa der.java:845) at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.eclipse.core.launcher.Main.basicRun(Main.java:247) at org.eclipse.core.launcher.Main.run(Main.java:703) at org.eclipse.core.launcher.Main.main(Main.java:539) "VM Thread" prio=5 tid=0x0023FEE8 nid=0x344 runnable
I don't think we can use Cancel as-is because when the connection hangs, we block. For example, if you call 'getConnection().getInputStream()', you will block if there is a connection problem. You need to have another thread that sleeps for a while and then calls 'disconnect' on the HTTPURLConnection but I don't know if this is clean and/or if it works on non-windows platforms.
I haven't looked at your code but if you call ProgressMonitorDialog.run with forked == true then your operation is run in a separate thread. So you could either have a polling thread that periodically checks for cancelled or you work with socket timeouts and check for the cancelled flag. BTW, I even had to restart my machine after this hang.
I know, it is a nasty problem. We do not have enough control in java.net package to address it properly. I have noticed that applications that want to provide anything more sophisticated in the networking domain often go one layer lower (directly to sockets).
*** This bug has been marked as a duplicate of 18598 ***