server/repository.py
changeset 8954 9d30719142bf
parent 8947 3bbd416b09ec
parent 8953 041804bc48e9
child 9007 e27337dfec8c
equal deleted inserted replaced
8952:8916a71e9f11 8954:9d30719142bf
  1635         self.pyro_registered = True
  1635         self.pyro_registered = True
  1636         # register a looping task to regularly ensure we're still registered
  1636         # register a looping task to regularly ensure we're still registered
  1637         # into the pyro name server
  1637         # into the pyro name server
  1638         if self._use_pyrons():
  1638         if self._use_pyrons():
  1639             self.looping_task(60*10, self._ensure_pyro_ns)
  1639             self.looping_task(60*10, self._ensure_pyro_ns)
       
  1640         # install hacky function to free cnxset
       
  1641         self.looping_task(60, self._cleanup_pyro)
  1640         return daemon
  1642         return daemon
       
  1643 
       
  1644     def _cleanup_pyro(self):
       
  1645         """Very hacky function to cleanup session left by dead Pyro thread.
       
  1646 
       
  1647         There is no clean pyro callback to detect this.
       
  1648         """
       
  1649         for session in self._sessions.values():
       
  1650             for thread, cnxset in session._threads_in_transaction.copy():
       
  1651                 if not thread.isAlive():
       
  1652                     self.warning('Freeing cnxset used by dead pyro threads: %',
       
  1653                                  thread)
       
  1654                     session._free_thread_cnxset(thread, cnxset)
  1641 
  1655 
  1642     def _ensure_pyro_ns(self):
  1656     def _ensure_pyro_ns(self):
  1643         if not self._use_pyrons():
  1657         if not self._use_pyrons():
  1644             return
  1658             return
  1645         from logilab.common import pyro_ext as pyro
  1659         from logilab.common import pyro_ext as pyro