if(t == null || !Thread.currentThread().equals(t)) break;
       public void run() {           Connection value;           Map.Entry entry;           long curr_time;           if(log.isInfoEnabled()) log.info("connection reaper thread was started. Number of connections=" +                                            conns.size() + ", reaper_interval=" + reaper_interval + ", conn_expire_time=" +                                            conn_expire_time);           while(conns.size() > 0 && t != null && t.equals(Thread.currentThread())) {               // first sleep               Util.sleep(reaper_interval);               synchronized(conns) {                   curr_time=System.currentTimeMillis();                   for(Iterator it=conns.entrySet().iterator(); it.hasNext();) {                       entry=(Map.Entry)it.next();                       value=(Connection)entry.getValue();                       if(log.isInfoEnabled()) log.info("connection is " +                                                        ((curr_time - value.last_access) / 1000) + " seconds old (curr-time=" +                                                        curr_time + ", last_access=" + value.last_access + ')');                       if(value.last_access + conn_expire_time < curr_time) {                           if(log.isInfoEnabled()) log.info("connection " + value +                                                            " has been idle for too long (conn_expire_time=" + conn_expire_time +                                                            "), will be removed");                           value.destroy();                           it.remove();                       }                   }               }           }           if(log.isInfoEnabled()) log.info("reaper terminated");           t=null;       }