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 |