aboutsummaryrefslogtreecommitdiff
path: root/libjava/java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java')
-rw-r--r--libjava/java/lang/InheritableThreadLocal.java13
-rw-r--r--libjava/java/lang/Math.java4
-rw-r--r--libjava/java/lang/StrictMath.java4
-rw-r--r--libjava/java/lang/ThreadGroup.java1
-rw-r--r--libjava/java/lang/ThreadLocal.java9
5 files changed, 18 insertions, 13 deletions
diff --git a/libjava/java/lang/InheritableThreadLocal.java b/libjava/java/lang/InheritableThreadLocal.java
index 31b64f5..5dfbe9a 100644
--- a/libjava/java/lang/InheritableThreadLocal.java
+++ b/libjava/java/lang/InheritableThreadLocal.java
@@ -1,5 +1,5 @@
/* InheritableThreadLocal -- a ThreadLocal which inherits values across threads
- Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,9 +37,11 @@ exception statement from your version. */
package java.lang;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
-import java.util.ArrayList;
+import java.util.Map;
import java.util.WeakHashMap;
/**
@@ -67,7 +69,8 @@ public class InheritableThreadLocal extends ThreadLocal
* List can be collected, too. Maps to a list in case the user overrides
* equals.
*/
- private static final WeakHashMap threadMap = new WeakHashMap();
+ private static final Map threadMap
+ = Collections.synchronizedMap(new WeakHashMap());
/**
* Creates a new InheritableThreadLocal that has no values associated
@@ -77,7 +80,7 @@ public class InheritableThreadLocal extends ThreadLocal
{
Thread currentThread = Thread.currentThread();
// Note that we don't have to synchronize, as only this thread will
- // ever modify the returned heritage.
+ // ever modify the returned heritage and threadMap is a synchronizedMap.
List heritage = (List) threadMap.get(currentThread);
if (heritage == null)
{
@@ -114,7 +117,7 @@ public class InheritableThreadLocal extends ThreadLocal
// The currentThread is the parent of the new thread.
Thread parentThread = Thread.currentThread();
// Note that we don't have to synchronize, as only this thread will
- // ever modify the returned heritage.
+ // ever modify the returned heritage and threadMap is a synchronizedMap.
ArrayList heritage = (ArrayList) threadMap.get(parentThread);
if (heritage != null)
{
diff --git a/libjava/java/lang/Math.java b/libjava/java/lang/Math.java
index 0d0930e..cb5f70b 100644
--- a/libjava/java/lang/Math.java
+++ b/libjava/java/lang/Math.java
@@ -1,5 +1,5 @@
/* java.lang.Math -- common mathematical functions, native allowed
- Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -521,7 +521,7 @@ public final class Math
* double to <code>x / y</code> (ties go to the even n); for a zero
* remainder, the sign is that of <code>x</code>. If either argument is NaN,
* the first argument is infinite, or the second argument is zero, the result
- * is NaN; if x is finite but y is infinte, the result is x. This is
+ * is NaN; if x is finite but y is infinite, the result is x. This is
* accurate within the limits of doubles.
*
* @param x the dividend (the top half)
diff --git a/libjava/java/lang/StrictMath.java b/libjava/java/lang/StrictMath.java
index b47d89c..bacc291 100644
--- a/libjava/java/lang/StrictMath.java
+++ b/libjava/java/lang/StrictMath.java
@@ -1,5 +1,5 @@
/* java.lang.StrictMath -- common mathematical functions, strict Java
- Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -1053,7 +1053,7 @@ public final strictfp class StrictMath
* double to <code>x / y</code> (ties go to the even n); for a zero
* remainder, the sign is that of <code>x</code>. If either argument is NaN,
* the first argument is infinite, or the second argument is zero, the result
- * is NaN; if x is finite but y is infinte, the result is x.
+ * is NaN; if x is finite but y is infinite, the result is x.
*
* @param x the dividend (the top half)
* @param y the divisor (the bottom half)
diff --git a/libjava/java/lang/ThreadGroup.java b/libjava/java/lang/ThreadGroup.java
index 80f62b6..b79c136 100644
--- a/libjava/java/lang/ThreadGroup.java
+++ b/libjava/java/lang/ThreadGroup.java
@@ -718,6 +718,7 @@ public class ThreadGroup
if (groups == null)
return;
threads.remove(t);
+ t.group = null;
// Daemon groups are automatically destroyed when all their threads die.
if (daemon_flag && groups.size() == 0 && threads.size() == 0)
{
diff --git a/libjava/java/lang/ThreadLocal.java b/libjava/java/lang/ThreadLocal.java
index b5877f5..9725659 100644
--- a/libjava/java/lang/ThreadLocal.java
+++ b/libjava/java/lang/ThreadLocal.java
@@ -1,5 +1,5 @@
/* ThreadLocal -- a variable with a unique value per thread
- Copyright (C) 2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,6 +37,7 @@ exception statement from your version. */
package java.lang;
+import java.util.Collections;
import java.util.Map;
import java.util.WeakHashMap;
@@ -101,7 +102,7 @@ public class ThreadLocal
* <code>set(Thread, Object)</code> and <code>get(Thread)</code> methods
* access it. Package visible for use by InheritableThreadLocal.
*/
- final Map valueMap = new WeakHashMap();
+ final Map valueMap = Collections.synchronizedMap(new WeakHashMap());
/**
* Creates a ThreadLocal object without associating any value to it yet.
@@ -135,7 +136,7 @@ public class ThreadLocal
{
Thread currentThread = Thread.currentThread();
// Note that we don't have to synchronize, as only this thread will
- // ever modify the returned value.
+ // ever modify the returned value and valueMap is a synchronizedMap.
Object value = valueMap.get(currentThread);
if (value == null)
{
@@ -156,7 +157,7 @@ public class ThreadLocal
public void set(Object value)
{
// Note that we don't have to synchronize, as only this thread will
- // ever modify the returned value.
+ // ever modify the returned value and valueMap is a synchronizedMap.
valueMap.put(Thread.currentThread(), value == null ? NULL : value);
}
}