You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.6 KiB
111 lines
3.6 KiB
/*
|
|
*
|
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
|
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
|
*/
|
|
// Copyright (c) 1995-96 by Cisco Systems, Inc.
|
|
|
|
package com.sun.jmx.snmp.daemon;
|
|
|
|
import java.util.logging.Level;
|
|
|
|
import static com.sun.jmx.defaults.JmxProperties.SNMP_ADAPTOR_LOGGER;
|
|
|
|
/**
|
|
* This class retries any timed out inform requests. This class is for internal use.
|
|
*/
|
|
|
|
final class SnmpTimerServer extends Thread {
|
|
|
|
// VARIABLES
|
|
//----------
|
|
|
|
private SnmpInformRequest req = null ;
|
|
|
|
SnmpQManager snmpq = null ;
|
|
|
|
// This boolean is used to stop handling requests while the corresponding SnmpQManager
|
|
// is being destroyed.
|
|
//
|
|
boolean isBeingDestroyed = false;
|
|
|
|
// CONSTRUCTORS
|
|
//-------------
|
|
|
|
public SnmpTimerServer (ThreadGroup grp, SnmpQManager q) {
|
|
super(grp, "SnmpTimerServer") ;
|
|
setName("SnmpTimerServer") ;
|
|
snmpq = q ;
|
|
start() ;
|
|
}
|
|
|
|
public synchronized void stopTimerServer() {
|
|
|
|
if (isAlive()) {
|
|
interrupt();
|
|
try {
|
|
// Wait until the thread die.
|
|
//
|
|
join();
|
|
} catch (InterruptedException e) {
|
|
// Ignore...
|
|
}
|
|
}
|
|
}
|
|
|
|
public void run() {
|
|
Thread.currentThread().setPriority(Thread.NORM_PRIORITY);
|
|
|
|
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
|
|
SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpTimerServer.class.getName(),
|
|
"run", "Timer Thread started");
|
|
}
|
|
|
|
while (true) {
|
|
|
|
try {
|
|
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
|
|
SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpTimerServer.class.getName(),
|
|
"run", "Blocking for inform requests");
|
|
}
|
|
if (req == null) {
|
|
req = snmpq.getTimeoutRequests() ;
|
|
}
|
|
if (req != null && req.inProgress()) {
|
|
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
|
|
SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpTimerServer.class.getName(),
|
|
"run", "Handle timeout inform request " + req.getRequestId());
|
|
}
|
|
req.action() ;
|
|
req = null ;
|
|
}
|
|
if (isBeingDestroyed == true)
|
|
break;
|
|
} catch (Exception e) {
|
|
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
|
|
SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpTimerServer.class.getName(),
|
|
"run", "Got unexpected exception", e);
|
|
}
|
|
} catch (ThreadDeath d) {
|
|
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
|
|
SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpTimerServer.class.getName(),
|
|
"run", "ThreadDeath, timer server unexpectedly shutting down", d);
|
|
}
|
|
throw d ;
|
|
} catch (OutOfMemoryError ome) {
|
|
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
|
|
SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpTimerServer.class.getName(),
|
|
"run", "OutOfMemoryError", ome);
|
|
}
|
|
yield();
|
|
} catch (Error err) {
|
|
if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
|
|
SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpTimerServer.class.getName(),
|
|
"run", "Received Internal error", err);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|