From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 84804 invoked by alias); 10 Jun 2019 13:28:32 -0000 Mailing-List: contact gdb-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: , Sender: gdb-cvs-owner@sourceware.org List-Subscribe: Sender: gdb-cvs-owner@sourceware.org Received: (qmail 84737 invoked by uid 306); 10 Jun 2019 13:28:32 -0000 Date: Mon, 10 Jun 2019 13:28:00 -0000 Message-ID: <20190610132832.84733.qmail@sourceware.org> Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Tom Tromey To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Use gdbpy_enter in py-breakpoint.c X-Act-Checkin: binutils-gdb X-Git-Author: Tom Tromey X-Git-Refname: refs/heads/master X-Git-Oldrev: caa429d81a9999699a40b6394c9fb7b258669d54 X-Git-Newrev: 25ce02ee7b7667fb7bb882421ff869c080777bee X-SW-Source: 2019-06/txt/msg00024.txt.bz2 https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=25ce02ee7b7667fb7bb882421ff869c080777bee commit 25ce02ee7b7667fb7bb882421ff869c080777bee Author: Tom Tromey Date: Fri Jun 7 16:08:47 2019 -0600 Use gdbpy_enter in py-breakpoint.c A few spots in py-breakpoint.c acquire the GIL manually. However, because these spots generate events, and because events are expected to be arbitrary gdb-flavored Python code, it's important to use gdbpy_enter instead, in order to ensure that the other gdb-related Python globals are set correctly. This patch makes this change. Tested on x86-64 Fedora 29. gdb/ChangeLog 2019-06-10 Tom Tromey * python/py-breakpoint.c (gdbpy_breakpoint_created) (gdbpy_breakpoint_deleted, gdbpy_breakpoint_modified): Use gdbpy_enter. Diff: --- gdb/ChangeLog | 6 ++++++ gdb/python/py-breakpoint.c | 18 ++++++++---------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 795ba45..8868073 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2019-06-10 Tom Tromey + + * python/py-breakpoint.c (gdbpy_breakpoint_created) + (gdbpy_breakpoint_deleted, gdbpy_breakpoint_modified): Use + gdbpy_enter. + 2019-06-10 Tom Tromey * elfread.c (elf_read_minimal_symbols): Don't set the dbx objfile diff --git a/gdb/python/py-breakpoint.c b/gdb/python/py-breakpoint.c index fc9543e..88cd7de 100644 --- a/gdb/python/py-breakpoint.c +++ b/gdb/python/py-breakpoint.c @@ -1003,7 +1003,6 @@ static void gdbpy_breakpoint_created (struct breakpoint *bp) { gdbpy_breakpoint_object *newbp; - PyGILState_STATE state; if (!user_breakpoint_p (bp) && bppy_pending_object == NULL) return; @@ -1015,7 +1014,8 @@ gdbpy_breakpoint_created (struct breakpoint *bp) && bp->type != bp_access_watchpoint) return; - state = PyGILState_Ensure (); + struct gdbarch *garch = bp->gdbarch ? bp->gdbarch : get_current_arch (); + gdbpy_enter enter_py (garch, current_language); if (bppy_pending_object) { @@ -1046,8 +1046,6 @@ gdbpy_breakpoint_created (struct breakpoint *bp) gdb_py_events.breakpoint_created) < 0) gdbpy_print_stack (); } - - PyGILState_Release (state); } /* Callback that is used when a breakpoint is deleted. This will @@ -1056,13 +1054,14 @@ static void gdbpy_breakpoint_deleted (struct breakpoint *b) { int num = b->number; - PyGILState_STATE state; struct breakpoint *bp = NULL; - state = PyGILState_Ensure (); bp = get_breakpoint (num); if (bp) { + struct gdbarch *garch = bp->gdbarch ? bp->gdbarch : get_current_arch (); + gdbpy_enter enter_py (garch, current_language); + gdbpy_ref bp_obj (bp->py_bp_object); if (bp_obj != NULL) { @@ -1077,7 +1076,6 @@ gdbpy_breakpoint_deleted (struct breakpoint *b) --bppy_live; } } - PyGILState_Release (state); } /* Callback that is used when a breakpoint is modified. */ @@ -1086,13 +1084,14 @@ static void gdbpy_breakpoint_modified (struct breakpoint *b) { int num = b->number; - PyGILState_STATE state; struct breakpoint *bp = NULL; - state = PyGILState_Ensure (); bp = get_breakpoint (num); if (bp) { + struct gdbarch *garch = bp->gdbarch ? bp->gdbarch : get_current_arch (); + gdbpy_enter enter_py (garch, current_language); + PyObject *bp_obj = (PyObject *) bp->py_bp_object; if (bp_obj) { @@ -1104,7 +1103,6 @@ gdbpy_breakpoint_modified (struct breakpoint *b) } } } - PyGILState_Release (state); }