[ openjms-Bugs-1107742 ] Clock Daemon Thread never exits in Applet
"SourceForge.net" <[email protected]> Wed, 08 Jun 2005 06:50:20 -0700
| Newsgroups | gmane.comp.java.openjms.devel |
|---|---|
| Message-ID | <[email protected]> |
Bugs item #1107742, was opened at 2005-01-23 23:32
Message generated for change (Settings changed) made by tanderson
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=474136&aid=1107742&group_id=54559
Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: client
Group: v0.7.6.1
>Status: Closed
>Resolution: Fixed
Priority: 5
Submitted By: Tim Anderson (tanderson)
>Assigned to: Tim Anderson (tanderson)
Summary: Clock Daemon Thread never exits in Applet
Initial Comment:
[Originally from
http://article.gmane.org/gmane.comp.java.openjms.use
r/2231 ]
In an applet environment, the Clock daemon thread
raises the following stack traces when the applet is
exited:
SEVERE: Internal error in clock daemon
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at org.exolab.jms.util.Clock.run(Clock.java:210)
followed closely by:
SEVERE: Internal error in clock daemon
java.lang.ThreadDeath
at java.lang.Thread.stop(Thread.java:630)
at java.lang.ThreadGroup.stopOrSuspend
(ThreadGroup.java:633)
at java.lang.ThreadGroup.stop
(ThreadGroup.java:547)
at sun.awt.AppContext.dispose(AppContext.java:411)
at sun.applet.AppletClassLoader.release
(AppletClassLoader.java:668)
at sun.plugin.security.PluginClassLoader.release
(PluginClassLoader.java:407)
at sun.applet.AppletPanel.release
(AppletPanel.java:168)
at sun.applet.AppletPanel.sendEvent
(AppletPanel.java:265)
at sun.plugin.AppletViewer.onPrivateClose
(AppletViewer.java:834)
at sun.plugin.AppletViewer$1.run
(AppletViewer.java:796)
at java.lang.Thread.run(Thread.java:534)
To make matters worse, once this error is raised
dumping the running threads shows this (after
numerous runs):
Dump thread list ...
Group main,ac=20,agc=10,pri=10
main,5,alive
AWT-Motif,6,alive,dameon
AWT-Shutdown,5,alive
Thread-1,5,alive
Thread-2,5,alive
AWT-EventQueue-0,6,alive
Group Plugin Thread Group,ac=4,agc=0,pri=10
Main Console Writer,6,alive
AWT-EventQueue-1,6,alive
Java2D Disposer,10,alive,dameon
TimerQueue,5,alive,dameon
Group http://myserver/myappletpage/-
threadGroup,ac=1,agc=0,pri=4
Clock Daemon,4,alive,dameon
Group http://myserver/myappletpage/-
threadGroup,ac=1,agc=0,pri=4
Clock Daemon,4,alive,dameon
Group http://myserver/myappletpage/-
threadGroup,ac=1,agc=0,pri=4
Clock Daemon,4,alive,dameon
...
Which also causes the memory to never be released.
Obviously some object is being referenced by this
running thread which causes JMS to never release
memory - as evidenced by this:
Garbage collect ... completed.
Memory: 47,368K Free: 21,342K (45%) ... completed.
Looking at the code for "org.exolab.jms.util.Clock" - the
run() method has no safe exit condition, running in
a "while(true)" block........... I assume that this causes
the ThreadDeath exception - which in turn could cause
the Applet code to stop destroying the thread group -
thus keeping objects references which should be gone.
A simple thread exit condition here may fix this.
Ken M.
----------------------------------------------------------------------
Comment By: Tim Anderson (tanderson)
Date: 2005-03-26 00:24
Message:
Logged In: YES
user_id=557161
Fixed in CVS. Fix will be available in the 0.7.7 release.
----------------------------------------------------------------------
Comment By: Tim Anderson (tanderson)
Date: 2005-01-23 23:33
Message:
Logged In: YES
user_id=557161
Changing the Clock code so that run() looks something like:
while (true) {
try {
for (int i = 0; i < _synchEvery; ++i) {
sleep(_unsynchTicks);
synchronized (Clock.class) {
_clock += _unsynchTicks + _adjust;
}
}
synchronize();
} catch (ThreadDeath exception) {
_log.debug("clock daemon terminating",
exception);
throw exception;
} catch (Throwable exception) {
_log.error("Internal error in clock daemon",
exception);
}
}
should correct the problem.
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=474136&aid=1107742&group_id=54559
-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games. How far can you shotput
a projector? How fast can you ride your desk chair down the office luge track?
If you want to score the big prize, get to know the little guy.
Play to win an NEC 61" plasma display: http://www.necitguy.com/?r=20