mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Linux: Name all threads started by calibre at the OS level for nicer debugging
This commit is contained in:
parent
451c9edfdc
commit
1abbe27bd8
@ -193,6 +193,36 @@ if not _run_once:
|
|||||||
__builtin__.__dict__['icu_upper'] = icu_upper
|
__builtin__.__dict__['icu_upper'] = icu_upper
|
||||||
__builtin__.__dict__['icu_title'] = title_case
|
__builtin__.__dict__['icu_title'] = title_case
|
||||||
|
|
||||||
|
if islinux:
|
||||||
|
# Name all threads at the OS level created using the threading module, see
|
||||||
|
# http://bugs.python.org/issue15500
|
||||||
|
import ctypes, ctypes.util, threading
|
||||||
|
libpthread_path = ctypes.util.find_library("pthread")
|
||||||
|
if libpthread_path:
|
||||||
|
libpthread = ctypes.CDLL(libpthread_path)
|
||||||
|
if hasattr(libpthread, "pthread_setname_np"):
|
||||||
|
pthread_setname_np = libpthread.pthread_setname_np
|
||||||
|
pthread_setname_np.argtypes = [ctypes.c_void_p, ctypes.c_char_p]
|
||||||
|
pthread_setname_np.restype = ctypes.c_int
|
||||||
|
orig_start = threading.Thread.start
|
||||||
|
def new_start(self):
|
||||||
|
orig_start(self)
|
||||||
|
try:
|
||||||
|
name = self.name
|
||||||
|
if not name or name.startswith('Thread-'):
|
||||||
|
name = self.__class__.__name__
|
||||||
|
if name == 'Thread':
|
||||||
|
name = self.name
|
||||||
|
if name:
|
||||||
|
if isinstance(name, unicode):
|
||||||
|
name = name.encode('ascii', 'replace')
|
||||||
|
ident = getattr(self, "ident", None)
|
||||||
|
if ident is not None:
|
||||||
|
pthread_setname_np(ident, name[:15])
|
||||||
|
except Exception:
|
||||||
|
pass # Don't care about failure to set name
|
||||||
|
threading.Thread.start = new_start
|
||||||
|
|
||||||
def test_lopen():
|
def test_lopen():
|
||||||
from calibre.ptempfile import TemporaryDirectory
|
from calibre.ptempfile import TemporaryDirectory
|
||||||
from calibre import CurrentDir
|
from calibre import CurrentDir
|
||||||
|
Loading…
x
Reference in New Issue
Block a user