# HG changeset patch # User Pierre-Yves David # Date 1367228616 -7200 # Node ID 9d30719142bf1fb960c1d57ef966744e1619b1ff # Parent 8916a71e9f11eeb0aed8f8f5e0998ea6f66840ba# Parent 041804bc48e91e440a5b573ceb0df5bf22863b80 merge with stable diff -r 8916a71e9f11 -r 9d30719142bf __pkginfo__.py diff -r 8916a71e9f11 -r 9d30719142bf debian/changelog --- a/debian/changelog Mon Apr 29 11:22:21 2013 +0200 +++ b/debian/changelog Mon Apr 29 11:43:36 2013 +0200 @@ -4,6 +4,12 @@ -- Pierre-Yves David Mon, 29 Apr 2013 11:20:56 +0200 +cubicweb (3.16.4-1) unstable; urgency=low + + * New upstream release + + -- Pierre-Yves David Fri, 26 Apr 2013 18:20:42 +0200 + cubicweb (3.16.3-1) unstable; urgency=low * New upstream release diff -r 8916a71e9f11 -r 9d30719142bf server/repository.py --- a/server/repository.py Mon Apr 29 11:22:21 2013 +0200 +++ b/server/repository.py Mon Apr 29 11:43:36 2013 +0200 @@ -1637,8 +1637,22 @@ # into the pyro name server if self._use_pyrons(): self.looping_task(60*10, self._ensure_pyro_ns) + # install hacky function to free cnxset + self.looping_task(60, self._cleanup_pyro) return daemon + def _cleanup_pyro(self): + """Very hacky function to cleanup session left by dead Pyro thread. + + There is no clean pyro callback to detect this. + """ + for session in self._sessions.values(): + for thread, cnxset in session._threads_in_transaction.copy(): + if not thread.isAlive(): + self.warning('Freeing cnxset used by dead pyro threads: %', + thread) + session._free_thread_cnxset(thread, cnxset) + def _ensure_pyro_ns(self): if not self._use_pyrons(): return