Release the GIL while running a gdb command or expression
authorTom Tromey <tom@tromey.com>
Sat, 8 Sep 2018 02:02:21 +0000 (20:02 -0600)
committerTom Tromey <tom@tromey.com>
Wed, 30 Jan 2019 14:06:20 +0000 (07:06 -0700)
commitb5eba2d8c050b39943918057283470959a5d18c3
tree8a3bc1d0dab118e1aff4d757ffe3ef1e88d5a35a
parenteeb14ea976c0a07affb7dec3562184836adcfe95
Release the GIL while running a gdb command or expression

PR python/23615 points out that gdb.execute_gdb_command does not
release the Python GIL.  This means that, while the gdb command is
running, other Python threads do not run.

This patch solves the problem by introducing a new RAII class that can
be used to temporarily release and then re-acquire the GIL, then puts
this into the appropriate places in execute_gdb_command and
gdbpy_parse_and_eval.

This does not include a test case, because after some research I could
not find a way to write one that was not racy.

gdb/ChangeLog
2019-01-30  Tom Tromey  <tom@tromey.com>

PR python/23615:
* python/python.c (execute_gdb_command): Use gdbpy_allow_threads.
(gdbpy_parse_and_eval): Likewise.
* python/python-internal.h (gdbpy_allow_threads): New class.
gdb/ChangeLog
gdb/python/python-internal.h
gdb/python/python.c