diff options
author | Tom Tromey <tromey@redhat.com> | 2005-05-25 15:23:56 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2005-05-25 15:23:56 +0000 |
commit | 93f8e21b71a52f12a70eb8556c244ed886612bbd (patch) | |
tree | 14b238eff9b75fc8a5c871087ee4eece2bb8e3a9 /libjava/java/lang/ref/natReference.cc | |
parent | 56c0cf75a09e159f97a8bd2e5dcc484cc0db9566 (diff) | |
download | gcc-93f8e21b71a52f12a70eb8556c244ed886612bbd.zip gcc-93f8e21b71a52f12a70eb8556c244ed886612bbd.tar.gz gcc-93f8e21b71a52f12a70eb8556c244ed886612bbd.tar.bz2 |
re PR libgcj/21703 (hang when rapidly calling String.intern())
PR libgcj/21703:
* java/lang/ref/natReference.cc (find_slot): Handle case where
table has no NULL entries.
* java/lang/natString.cc (_Jv_StringFindSlot): Handle case where
table has no NULL entries.
From-SVN: r100153
Diffstat (limited to 'libjava/java/lang/ref/natReference.cc')
-rw-r--r-- | libjava/java/lang/ref/natReference.cc | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/libjava/java/lang/ref/natReference.cc b/libjava/java/lang/ref/natReference.cc index e322ae3..5ad5b10 100644 --- a/libjava/java/lang/ref/natReference.cc +++ b/libjava/java/lang/ref/natReference.cc @@ -1,6 +1,6 @@ // natReference.cc - Native code for References -/* Copyright (C) 2001, 2002, 2003 Free Software Foundation +/* Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation This file is part of libgcj. @@ -78,7 +78,7 @@ find_slot (jobject key) int start_index = hcode & (hash_size - 1); int index = start_index; int deleted_index = -1; - for (;;) + do { object_list *ptr = &hash[index]; if (ptr->reference == key) @@ -96,8 +96,12 @@ find_slot (jobject key) JvAssert (ptr->reference == DELETED_REFERENCE); } index = (index + step) & (hash_size - 1); - JvAssert (index != start_index); } + while (index != start_index); + // Note that we can have INDEX == START_INDEX if the table has no + // NULL entries but does have DELETED entries. + JvAssert (deleted_index >= 0); + return &hash[deleted_index]; } static void |