From e8bd883e79eecaf6ba3b2b6b6c288d8dc8f0cd76 Mon Sep 17 00:00:00 2001 From: David McKnight Date: Fri, 14 Oct 2011 15:50:45 +0000 Subject: [PATCH] [358301] [DSTORE] Hang during debug source look up --- .../src/org/eclipse/dstore/core/miners/Miner.java | 6 +++++- .../internal/core/server/ServerUpdateHandler.java | 10 ++++++++-- .../eclipse/dstore/internal/core/util/Sender.java | 13 +++++++++---- .../dstore/internal/core/util/XMLparser.java | 6 ++++++ 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/miners/Miner.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/miners/Miner.java index ab45844e634..cc3d9135726 100644 --- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/miners/Miner.java +++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/miners/Miner.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2002, 2010 IBM Corporation and others. + * Copyright (c) 2002, 2011 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -19,6 +19,7 @@ * Martin Oberhuber (Wind River) - [199854][api] Improve error reporting for archive handlers * David McKnight (IBM) - [232004] [dstore][multithread] some miner finish() is not terminated sometimes * David McKnight (IBM) - [328060] [dstore] command queue in Miner should be synchronized + * David McKnight (IBM) - [358301] [DSTORE] Hang during debug source look up *******************************************************************************/ package org.eclipse.dstore.core.miners; @@ -325,6 +326,9 @@ implements ISchemaExtender exc = "Exception"; //$NON-NLS-1$ _dataStore.createObject(status, DataStoreResources.model_error, exc); } + catch (OutOfMemoryError e){ + System.exit(-1); + } catch (Error er) { er.printStackTrace(); diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/server/ServerUpdateHandler.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/server/ServerUpdateHandler.java index 326da2c6659..83682c723ee 100644 --- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/server/ServerUpdateHandler.java +++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/server/ServerUpdateHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2002, 2009 IBM Corporation and others. + * Copyright (c) 2002, 2011 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -15,6 +15,7 @@ * David McKnight (IBM) [222168][dstore] Buffer in DataElement is not sent * David McKnight (IBM) - [225507][api][breaking] RSE dstore API leaks non-API types * David McKnight (IBM) [246826][dstore] KeepAlive does not work correctly + * David McKnight (IBM) - [358301] [DSTORE] Hang during debug source look up *******************************************************************************/ package org.eclipse.dstore.internal.core.server; @@ -261,7 +262,12 @@ public class ServerUpdateHandler extends UpdateHandler { if (!_dataObjects.isEmpty() || _pendingKeepAliveConfirmation != null || _pendingKeepAliveRequest != null || !_classesToSend.isEmpty()) { - sendUpdates(); + try { + sendUpdates(); + } + catch (OutOfMemoryError e){ + System.exit(-1); + } } } diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/Sender.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/Sender.java index 5f961fb2abe..0b9ac9468ed 100644 --- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/Sender.java +++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/Sender.java @@ -18,6 +18,7 @@ * David McKnight (IBM) [343939][dstore][windows] DBCS3.7 DBCS characters are corrupted in Files * David McKnight (IBM) [347412][dstore] Need an option to set TCP NODELAYACKS * David McKnight (IBM) [350315][dstore] regress change made for bug 305218 + * David McKnight (IBM) - [358301] [DSTORE] Hang during debug source look up *******************************************************************************/ package org.eclipse.dstore.internal.core.util; @@ -303,10 +304,14 @@ public class Sender implements ISender { synchronized (_outFile) { - - _xmlGenerator.empty(); - _xmlGenerator.generate(objectRoot, depth); - _xmlGenerator.flushData(); + try { + _xmlGenerator.empty(); + _xmlGenerator.generate(objectRoot, depth); + _xmlGenerator.flushData(); + } + catch (OutOfMemoryError e){ + System.exit(-1); + } } } diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/XMLparser.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/XMLparser.java index 4084e3f972c..f744dec9876 100644 --- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/XMLparser.java +++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/XMLparser.java @@ -24,6 +24,7 @@ * David McKnight (IBM) - [282364] [dstore][multithread] timer-threads stay active after disconnect * David McKnight (IBM) [343939][dstore][windows] DBCS3.7 DBCS characters are corrupted in Files * David McKnight (IBM) [350315][dstore] regress change made for bug 305218 + * David McKnight (IBM) - [358301] [DSTORE] Hang during debug source look up *******************************************************************************/ package org.eclipse.dstore.internal.core.util; @@ -556,6 +557,7 @@ public class XMLparser String matchTag = null; boolean done = false; + try { while (!done) { String xmlTag = readLine(reader, socket); @@ -790,6 +792,10 @@ public class XMLparser if (_panic) return null; } + } + catch (OutOfMemoryError e){ + System.exit(-1); + } DataElement result = _rootDataElement; _rootDataElement.setParent(null); // this root is transient