diff options
Diffstat (limited to 'odoo/tools/misc.py')
| -rw-r--r-- | odoo/tools/misc.py | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/odoo/tools/misc.py b/odoo/tools/misc.py index 5715c9b83c6..79f1d386949 100644 --- a/odoo/tools/misc.py +++ b/odoo/tools/misc.py @@ -926,8 +926,10 @@ class ConstantMapping(Mapping): return self._value -def dumpstacks(sig=None, frame=None): - """ Signal handler: dump a stack trace for each existing thread.""" +def dumpstacks(sig=None, frame=None, thread_idents=None): + """ Signal handler: dump a stack trace for each existing thread or given + thread(s) specified through the ``thread_idents`` sequence. + """ code = [] def extract_stack(stack): @@ -944,14 +946,15 @@ def dumpstacks(sig=None, frame=None): 'url': getattr(th, 'url', 'n/a')} for th in threading.enumerate()} for threadId, stack in sys._current_frames().items(): - thread_info = threads_info.get(threadId, {}) - code.append("\n# Thread: %s (db:%s) (uid:%s) (url:%s)" % - (thread_info.get('repr', threadId), - thread_info.get('dbname', 'n/a'), - thread_info.get('uid', 'n/a'), - thread_info.get('url', 'n/a'))) - for line in extract_stack(stack): - code.append(line) + if not thread_idents or threadId in thread_idents: + thread_info = threads_info.get(threadId, {}) + code.append("\n# Thread: %s (db:%s) (uid:%s) (url:%s)" % + (thread_info.get('repr', threadId), + thread_info.get('dbname', 'n/a'), + thread_info.get('uid', 'n/a'), + thread_info.get('url', 'n/a'))) + for line in extract_stack(stack): + code.append(line) if odoo.evented: # code from http://stackoverflow.com/questions/12510648/in-gevent-how-can-i-dump-stack-traces-of-all-running-greenlets |
