Merge "[521999] Handle IBM java.lang.String implementation"
diff --git a/plugins/org.eclipse.mat.dtfj/src/org/eclipse/mat/dtfj/DTFJIndexBuilder.java b/plugins/org.eclipse.mat.dtfj/src/org/eclipse/mat/dtfj/DTFJIndexBuilder.java
index 9d693f2..e988be8 100644
--- a/plugins/org.eclipse.mat.dtfj/src/org/eclipse/mat/dtfj/DTFJIndexBuilder.java
+++ b/plugins/org.eclipse.mat.dtfj/src/org/eclipse/mat/dtfj/DTFJIndexBuilder.java
@@ -6918,6 +6918,19 @@
Messages.DTFJIndexBuilder_UnableToFindClassLoader, name, format(claddr)), null);
}
loader = getLoaderAddress(load, bootLoaderAddress);
+
+ int loaderId = indexToAddress.reverse(loader);
+
+ if (loaderId < 0)
+ {
+ // If we can't find the loader ID, then we'll run into issues later
+ // in GarbageCleaner (see bug 464199), so we'll just raise an error
+ // and set the classloader to the bootloader.
+ listener.sendUserMessage(Severity.ERROR, MessageFormat.format(
+ Messages.DTFJIndexBuilder_ClassLoaderAtAddressNotFound, format(loader), loaderId,
+ format(claddr), indexToAddress.reverse(claddr), name), null);
+ loader = fixBootLoaderAddress(bootLoaderAddress, bootLoaderAddress);
+ }
}
catch (CorruptDataException e)
{
diff --git a/plugins/org.eclipse.mat.parser/src/org/eclipse/mat/parser/internal/Messages.java b/plugins/org.eclipse.mat.parser/src/org/eclipse/mat/parser/internal/Messages.java
index 23ee997..4226ba7 100644
--- a/plugins/org.eclipse.mat.parser/src/org/eclipse/mat/parser/internal/Messages.java
+++ b/plugins/org.eclipse.mat.parser/src/org/eclipse/mat/parser/internal/Messages.java
@@ -123,6 +123,8 @@
public static String OQLParser_Encountered_X_at_line_X_column_X_Was_expecting_one_of_X;
public static String OQLParser_Missing_return_statement_in_function;
+ public static String ThreadStackHelper_InvalidThread;
+
static
{
// initialize resource bundle
diff --git a/plugins/org.eclipse.mat.parser/src/org/eclipse/mat/parser/internal/ThreadStackHelper.java b/plugins/org.eclipse.mat.parser/src/org/eclipse/mat/parser/internal/ThreadStackHelper.java
index 42116a1..ce96844 100644
--- a/plugins/org.eclipse.mat.parser/src/org/eclipse/mat/parser/internal/ThreadStackHelper.java
+++ b/plugins/org.eclipse.mat.parser/src/org/eclipse/mat/parser/internal/ThreadStackHelper.java
@@ -18,15 +18,18 @@
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
+import java.util.logging.Logger;
import org.eclipse.mat.SnapshotException;
import org.eclipse.mat.collect.ArrayInt;
import org.eclipse.mat.collect.HashMapIntObject;
import org.eclipse.mat.snapshot.ISnapshot;
import org.eclipse.mat.snapshot.model.IThreadStack;
+import org.eclipse.mat.util.MessageUtil;
/* package */class ThreadStackHelper
{
+ private static final Logger logger = Logger.getLogger(ThreadStackHelper.class.getCanonicalName());
/* package */static HashMapIntObject<IThreadStack> loadThreadsData(ISnapshot snapshot) throws SnapshotException
{
@@ -83,9 +86,19 @@
if (threadAddress != -1)
{
- int threadId = snapshot.mapAddressToId(threadAddress);
- IThreadStack stack = new ThreadStackImpl(threadId, buildFrames(lines, line2locals));
- threadId2stack.put(threadId, stack);
+ try
+ {
+ int threadId = snapshot.mapAddressToId(threadAddress);
+ IThreadStack stack = new ThreadStackImpl(threadId, buildFrames(lines, line2locals));
+ threadId2stack.put(threadId, stack);
+ }
+ catch (SnapshotException se)
+ {
+ // See
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=520908
+ logger.severe(MessageUtil.format(Messages.ThreadStackHelper_InvalidThread,
+ "0x" + Long.toHexString(threadAddress), se.getLocalizedMessage())); //$NON-NLS-1$
+ }
}
}
diff --git a/plugins/org.eclipse.mat.parser/src/org/eclipse/mat/parser/internal/messages.properties b/plugins/org.eclipse.mat.parser/src/org/eclipse/mat/parser/internal/messages.properties
index 904514b..9ef08a2 100644
--- a/plugins/org.eclipse.mat.parser/src/org/eclipse/mat/parser/internal/messages.properties
+++ b/plugins/org.eclipse.mat.parser/src/org/eclipse/mat/parser/internal/messages.properties
@@ -117,3 +117,4 @@
OQLParser_Encountered_X_at_line_X_column_X_Was_expecting_one_of_X=Encountered "{0}" at line {1}, column {2}.\nWas expecting one of: {3}
OQLParser_Missing_return_statement_in_function=Missing return statement in function
+ThreadStackHelper_InvalidThread=Invalid thread {0}: {1}
\ No newline at end of file