Commit Graph

31 Commits

Author SHA1 Message Date
47503854d5 Thread.sleep(0) should not sleep indefinitely
Our implementation uses Object.wait(long) to implement Thread.sleep,
which had the side effect of interpreting zero as infinity.  However,
for Thread.sleep, zero just means zero.  I assume that doesn't mean
"don't sleep at all", though, or else the app wouldn't have called
Thread.sleep in the first place, so this patch sleeps for one
millisecond when zero is passed -- just enough to yield the processor
for a bit.  Thread.yield might be a better choice in this case, but I
assume the app would have called that directly if that's what it
wanted.
2012-08-12 11:17:59 -06:00
0addd8c814 update copyright years 2012-05-11 17:43:27 -06:00
d0eda37a90 make Thread.interrupted static to match Java API 2012-05-11 13:23:19 -06:00
c3fa08c430 fix Thread.interrupt and Thread.interrupted
These were both totally broken; the latter wasn't even implemented.
This commit fixes/implements them and adds a simple test to exercise
them.
2011-07-12 14:15:43 -06:00
3d49173b0b avoid inifinite recursion if java.lang.Object is missing; refactoring
When trying to create an array class, we try to resolve
java.lang.Object so we can use its vtable in the array class.
However, if Object is missing, we'll try to create and throw a
ClassNotFoundException, which requires creating an array to store the
stack trace, which requires creating an array class, which requires
resolving Object, etc..  This commit short-circuits this process by
telling resolveClass not to create and throw an exception if it can't
find Object.

While doing the above work, I noticed that the implementations of
Classpath::makeThrowable in classpath-avian.cpp and
classpath-openjdk.cpp were identical, so I made makeThrowable a
top-level function.

Finally, I discovered that Thread.setDaemon can only be called before
the target thread has been started, which allowed me to simplify the
code to track daemon threads in the VM.
2010-12-09 19:38:12 -07:00
a5742f5985 update copyright years 2010-12-05 20:21:09 -07:00
d4708907ea fix non-openjdk build 2010-11-27 11:31:34 -07:00
c1c9d2111b remove GNU Classpath and Apache Harmony compatibility code
Rather than try to support mixing Avian's core classes with those of
an external class library -- which necessitates adding a lot of stub
methods which throw UnsupportedOperationExceptions, among other
comprimises -- we're looking to support such external class libraries
in their unmodified forms.  The latter strategy has already proven
successful with OpenJDK's class library.  Thus, this commit removes
the stub methods, etc., which not only cleans up the code but avoids
misleading application developers as to what classes and methods
Avian's built-in class library supports.
2010-09-27 15:58:02 -06:00
d0d53e2e10 fix custom-classloader-related concurrency problems and other bugs
The main changes in this commit ensure that we don't hold the global
class lock when doing class resolution using application-defined
classloaders.  Such classloaders may do their own locking (in fact,
it's almost certain), making deadlock likely when mixed with VM-level
locking in various orders.

Other changes include a fix to avoid overflow when waiting for
extremely long intervals and a GC root stack mapping bug.
2010-09-16 20:49:02 -06:00
a68742200b return empty stack trace for thread which isn't running 2009-10-26 11:44:29 -06:00
c4b5ecec90 implement Runtime.addShutdownHook and Thread.setDaemon; avoid segfaults due to an application calling e.g. CallStaticBooleanMethod when it really meant CallStaticVoidMethod 2009-08-19 14:27:03 -06:00
d868815737 put thread into runnable state in Thread.start 2009-08-10 17:36:11 -06:00
5c72746d2c inherit thread group from current thread 2009-08-10 07:46:59 -06:00
16537a32bc fix logic in Thread.join(long) (second try) 2009-06-04 18:08:51 -06:00
a064c744f4 fix logic in Thread.join(long) 2009-06-04 18:07:00 -06:00
44e3ee5bd7 fix misspelling in comment 2009-06-04 18:03:09 -06:00
98be5c509e more progress towards GNU Classpath compatibility 2009-06-03 16:17:55 -06:00
4ecce8286f fix recursive invocation of Thread constructor 2008-07-13 18:34:59 -06:00
0e539615e7 add Thread.name field 2008-07-13 18:21:04 -06:00
d9ec8e20bf implement Thread.getStackTrace, activeCount, and enumerate 2008-04-11 16:48:39 -06:00
2edaa82801 prepend copyright notice and license to all source files; add license.txt and readme.txt 2008-02-19 11:06:52 -07:00
4611c89dbe add a few classpath methods 2007-11-06 17:41:53 -07:00
b56eed68be implement Thread.[get|set]ContextClassloader() 2007-07-31 18:08:20 -06:00
da692a539f inherit thread locals at thread creation time, not start time 2007-07-29 19:27:42 -06:00
0e373727a2 implement Thread.interrupt() 2007-07-28 15:28:25 -06:00
abd9c2bc8d fix primitive class resolution to avoid mistaking normal classes with names like 'B' for primitive classes 2007-07-28 10:55:24 -06:00
41bee5829e misc. bugfixes and tweaks 2007-07-28 10:10:13 -06:00
90d60b3459 more classpath classes 2007-07-21 16:36:51 -06:00
fd770fd884 sketch a few more classpath classes 2007-07-21 14:44:39 -06:00
e5bea7a455 progress on thread support 2007-07-07 12:09:16 -06:00
c3320c2c97 flesh out classpath enough to test threading; fix indexing bug in parsePool() 2007-07-04 16:27:08 -06:00