classification
Title: [EASY] test_gdb.test_threads() is specific to _POSIX_THREADS, fail on FreeBSD
Type: Stage:
Components: Library (Lib) Versions: Python 3.8
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: koobs, vstinner, zitterbewegung
Priority: normal Keywords: easy

Created on 2019-03-04 14:23 by vstinner, last changed 2019-03-16 02:31 by zitterbewegung.

Messages (5)
msg337120 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2019-03-04 14:23
On my FreeBSD VM, _POSIX_THREADS is not defined:

sys.thread_info: sys.thread_info(name='pthread', lock='semaphore', version=None)

test_gdb fails with:

Verify that "py-bt" indicates threads that are waiting for the GIL ... FAIL

======================================================================
FAIL: test_threads (test.test_gdb.PyBtTests)
Verify that "py-bt" indicates threads that are waiting for the GIL
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/home/vstinner/prog/python/master/Lib/test/test_gdb.py", line 826, in test_threads
    self.assertIn('Waiting for the GIL', gdb_output)
AssertionError: 'Waiting for the GIL' not found in 'Breakpoint 1 at 0x49e5d0: file Python/bltinmodule.c, line 1203.\n[New LWP 100742 of process 68315]\n[New LWP 100749 of process 68315]\n[New LWP 100751 of process 68315]\n[New LWP 100766 of process 68315]\n\nThread 1 hit Breakpoint 1, builtin_id (self=, v=42) at Python/bltinmodule.c:1203\n1203\t    return PyLong_FromVoidPtr(v);\n\nThread 5 (LWP 100766 of process 68315):\nTraceback (most recent call first):\n  File "<string>", line 10, in run\n  File "/usr/home/vstinner/prog/python/master/Lib/threading.py", line 917, in _bootstrap_inner\n    self.run()\n  File "/usr/home/vstinner/prog/python/master/Lib/threading.py", line 885, in _bootstrap\n    self._bootstrap_inner()\n\nThread 4 (LWP 100751 of process 68315):\nTraceback (most recent call first):\n  File "<string>", line 10, in run\n  File "/usr/home/vstinner/prog/python/master/Lib/threading.py", line 917, in _bootstrap_inner\n    self.run()\n  File "/usr/home/vstinner/prog/python/master/Lib/threading.py", line 885, in _bootstrap\n    self._bootstrap_inner()\n\nThread 3 (LWP 100749 of process 68315):\nTraceback (most recent call first):\n  File "<string>", line 10, in run\n  File "/usr/home/vstinner/prog/python/master/Lib/threading.py", line 917, in _bootstrap_inner\n    self.run()\n  File "/usr/home/vstinner/prog/python/master/Lib/threading.py", line 885, in _bootstrap\n    self._bootstrap_inner()\n\nThread 2 (LWP 100742 of process 68315):\nTraceback (most recent call first):\n  File "<string>", line 10, in run\n  File "/usr/home/vstinner/prog/python/master/Lib/threading.py", line 917, in _bootstrap_inner\n    self.run()\n  File "/usr/home/vstinner/prog/python/master/Lib/threading.py", line 885, in _bootstrap\n    self._bootstrap_inner()\n\nThread 1 (LWP 100559 of process 68315):\nTraceback (most recent call first):\n  <built-in method id of module object at remote 0x800bccde8>\n  File "<string>", line 18, in <module>\n'


=> 'Waiting for the GIL' cannot be found in the output, because python-gdb.py failed to detect that a threading is waiting for the GIL.


The problem can be found in Tools/gdb/libpython.py:

    def is_waiting_for_gil(self):
        '''Is this frame waiting on the GIL?'''
        # This assumes the _POSIX_THREADS version of Python/ceval_gil.h:
        name = self._gdbframe.name()
        if name:
            return 'pthread_cond_timedwait' in name

pthread_cond_timedwait() is too close to POSIX threads. We can make this function more portable by checking for 'take_gil' function instead.
msg337643 - (view) Author: Joshua Jay Herman (zitterbewegung) * Date: 2019-03-11 01:59
Hi, I would like to try to solve this issue. Does this occur on the latest version of FreeBSD?
msg337687 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2019-03-11 17:07
I am running FreeBSD 12. I don't recall the minor version (12.1 maybe?).
msg337712 - (view) Author: Joshua Jay Herman (zitterbewegung) * Date: 2019-03-12 02:52
I was able to reproduce this on FreeBSD 12.0.
msg338050 - (view) Author: Joshua Jay Herman (zitterbewegung) * Date: 2019-03-16 02:31
So I changed 'pthread_cond_timedwait' to 'take_gil' and this didn't seem to have an effect on the unit test.

I installed GDB 8.2 is that the same version you are using?
History
Date User Action Args
2019-03-16 02:31:09zitterbewegungsetmessages: + msg338050
2019-03-12 02:57:22koobssetnosy: + koobs
2019-03-12 02:52:43zitterbewegungsetmessages: + msg337712
2019-03-11 17:07:03vstinnersetmessages: + msg337687
2019-03-11 01:59:55zitterbewegungsetnosy: + zitterbewegung
messages: + msg337643
2019-03-04 14:25:40vstinnersetkeywords: + easy
title: test_gdb.test_threads() is specific to _POSIX_THREADS, fail on FreeBSD -> [EASY] test_gdb.test_threads() is specific to _POSIX_THREADS, fail on FreeBSD
2019-03-04 14:23:48vstinnercreate