[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjms-developer
Subject:    [openjms-developer] [ openjms-Bugs-1107742 ] Clock Daemon Thread never exits in Applet
From:       "SourceForge.net" <noreply () sourceforge ! net>
Date:       2005-06-08 13:50:20
Message-ID: E1Dg0wm-0000gZ-Fj () sc8-sf-web3 ! sourceforge ! net
[Download RAW message or body]

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Ūtail&atidG4136&aid07742&group_idT559

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 ,agc,pri
    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
    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_idU7161

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_idU7161

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Ūtail&atidG4136&aid07742&group_idT559


-------------------------------------------------------
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 
_______________________________________________
openjms-developer mailing list
openjms-developer@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openjms-developer
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic