W3C home > Mailing lists > Public > www-jigsaw@w3.org > January to February 2000

[Fwd: Re: (Review ID: 100683) Runtime.addShutdownHook doesn't work...]

From: Roland Mainz <Roland.Mainz@informatik.med.uni-giessen.de>
Date: Thu, 03 Feb 2000 12:01:50 +0100
Message-Id: <3899601E.5A4A2FD2@informatik.med.uni-giessen.de>
To: W3 Jigsaw Mailinglist <www-jigsaw@w3.org>

Hi !

----

Yves, Benoit - can you verify the followinng info, please ?
If this works we have a working way to get rid of the "user hit
^C"-problem...

BTW: JDK1.3 implements also a way to launch a external program WITH
supplying the current working directory...

-------- Original Message --------
From: sandeepk <sandeep.konchady@eng.sun.com>
Subject: Re: (Review ID: 100683) Runtime.addShutdownHook doesn't work...
To: Roland.Mainz@informatik.med.uni-giessen.de

Hi Roland,

Thank you for using the "Report A Bug" feature. The bug you have
reported was tested on Sun4 Solaris 2.7 and Windows NT 4.0 SP4.
Under Solaris I used the proposed release of JDK 1.3RC1 and under
JDK 1.3RC1 release that is available from JDC. Under both these
platforms and JDK revs the program that you've sent worked fine.
This is apparently broken under Kestrel-beta. So that should be
a good news !!.

Regards,
Sandeep
----------------- Original Bug Report-------------------

category : java
subcategory : classes_lang
type : bug
synopsis : Runtime.addShutdownHook doesn't work...
description : java version "1.3beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3beta-O)
Java(TM) HotSpot Client VM (build 1.3beta-O-release, 1.3beta-O-release,
interpreted mode)


1., 2., 3., 4: Exact steps to reproduce the problem:
- try to add a shutdownhook via Runtime.addShutdownHook().
It fails with a problem within native code ;-(

The following example code was written as a workaround of the problem,
but the
next issue is that not all signals like "dumb users CTRL-C kill" are
catched ;-(

-- snip --

public class ShutdownHook
{
    static class MyHookThread extends Thread
    {
        MyHookThread( String name )
        {
            super( name );
        }
        
        public void run()
        {
            System.err.println( "shutting down `" + getName() + "`." );
        }
    }
    
    
    public static void addShutdownHook( Thread hook )
        throws IllegalArgumentException,
               IllegalStateException,
               SecurityException
    {
        try
        {
          Runtime.getRuntime().addShutdownHook( hook );
        }
        /* this is to catch a bug in "JDK 1.3 beta". Trying to add the
shutdownHook results in this exception:
         *  Exception in thread "main"
java.lang.IllegalArgumentException: Unknown signal: HUP
         *      at sun.misc.Signal.<init>(Signal.java:133)
         *      at java.lang.Terminator.setup(Terminator.java:46)
         *      at java.lang.Shutdown.add(Shutdown.java:92)
         *      at java.lang.Runtime.addShutdownHook(Runtime.java:197)
         *      at ShutdownHook.main(ShutdownHook.java:27)
         */
        catch( IllegalArgumentException exc )
        {
          boolean throwAgain = true;
          String  msg        = exc.getMessage();
          
          if( msg != null )
          {
            if( msg.equals( "Unknown signal: HUP" ) )
              throwAgain = false;
          }
          
          // re-throw the exc if it doesn't match our specs above...
          if( throwAgain )
          {
            throw exc;
          }
        }
    }
    
    
    public static void main( String args[] )
    {
        d( "start." );
        
        d( "creating hooks..." );
        Thread hook1 = new MyHookThread( "hook1" );
        Thread hook2 = new MyHookThread( "hook2" );
        
        d( "adding hooks..." );
        addShutdownHook( hook1 );
        addShutdownHook( hook2 );
        
        d( "sleeping 5 sec..." );
        try
        {
          Thread.sleep( 5 * 1000 );
        }
        catch( InterruptedException exc )
        {
          d( "sleep interrupted ;-(" );
        }
        
        d( "exit..." );
        System.exit( 0 );
    }
    
    
    static void d( String s )
    {
        System.err.println( "ShutdownHook: " + s );
    }
}
-- snip --

5. --
workaround : Partial workround: See above. All hooks gets registered and
are called at
System.exit(*);, but signals aren't catched my this method ;-(
Full workaround: Spend 10 mins on the native code and fix it - or send
me the
source, please...

Thanks to this bug, my users can kill their jigsaw WWW servers and
connected
beans without a clean shutdown, causing a LOT OF TROUBLE here to repair
those
mistakes by hand (more correct: on hands and knees ;-(((  ).
suggested_val : 
cust_name : Roland Mainz
cust_email : Roland.Mainz@informatik.med.uni-giessen.de
jdcid : <rfe>What about pre-filling this
keyword : betabug
company : University Giessen
release : kestrel-beta
hardware : sun4
OSversion : sol2.7
priority : 4
bugtraqID : 0
dateCreated : 2000-02-02 02:09:31.0
dateEvaluated : 2000-02-02 12:06:33.193
Received on Thursday, 3 February 2000 06:02:09 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 9 April 2012 12:13:34 GMT