From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 68214 invoked by alias); 5 May 2017 03:54:10 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 68194 invoked by uid 89); 5 May 2017 03:54:09 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_HELO_PASS,SPF_SOFTFAIL autolearn=ham version=3.3.2 spammy= X-HELO: simark.ca Received: from simark.ca (HELO simark.ca) (158.69.221.121) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 05 May 2017 03:54:06 +0000 Received: by simark.ca (Postfix, from userid 33) id 8EBAC1E4B9; Thu, 4 May 2017 23:54:07 -0400 (EDT) To: Kevin Buettner Subject: Re: [PATCH v2 2/7] Add `thread_from_thread_handle' function to (Python) gdb module X-PHP-Originating-Script: 33:rcube.php MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Fri, 05 May 2017 03:54:00 -0000 From: Simon Marchi Cc: gdb-patches@sourceware.org In-Reply-To: <20170408230657.556b99e4@pinnacle.lan> References: <20170408224959.67164a27@pinnacle.lan> <20170408230657.556b99e4@pinnacle.lan> Message-ID: <68dac34e4303112e6c57a00ddaeaba9f@polymtl.ca> X-Sender: simon.marchi@polymtl.ca User-Agent: Roundcube Webmail/1.2.5 X-IsSubscribed: yes X-SW-Source: 2017-05/txt/msg00132.txt.bz2 On 2017-04-09 02:06, Kevin Buettner wrote: > gdb/ChangeLog: > * python/py-infthread.c (gdbpy_thread_from_thread_handle): New > function. > * python/python-internal.h (thread_object_type): Declare. > (gdbpy_thread_from_thread_handle): Declare. > * python/python.c (thread_from_thread_handle): Register. > --- > gdb/python/py-infthread.c | 41 > +++++++++++++++++++++++++++++++++++++++++ > gdb/python/python-internal.h | 3 +++ > gdb/python/python.c | 4 ++++ > 3 files changed, 48 insertions(+) > > diff --git a/gdb/python/py-infthread.c b/gdb/python/py-infthread.c > index 5482bf9..5739984 100644 > --- a/gdb/python/py-infthread.c > +++ b/gdb/python/py-infthread.c > @@ -294,6 +294,47 @@ gdbpy_selected_thread (PyObject *self, PyObject > *args) > Py_RETURN_NONE; > } > > +/* Implementation of gdb.thread_from_thread_handle (handle) > + -> gdb.InferiorThread. */ > + > +PyObject * > +gdbpy_thread_from_thread_handle (PyObject *self, PyObject *args, > PyObject *kw) > +{ > + PyObject *handle_obj, *result; > + static char *keywords[] = { "thread_handle", NULL }; > + > + if (! PyArg_ParseTupleAndKeywords (args, kw, "O", keywords, > &handle_obj)) > + return NULL; To adapt the patch to the current GDB master, you'll need to make keyword a const char * [], and use gdb_PyArg_ParseTupleAndKeywords. > + > + result = Py_None; > + > + if (gdbpy_is_value_object (handle_obj)) > + { > + TRY > + { > + struct thread_info *thread_info; > + struct value *val = value_object_to_value (handle_obj); > + > + thread_info = find_thread_by_handle (val); > + if (thread_info != NULL) > + { > + result = (PyObject *) find_thread_object (thread_info->ptid); > + if (result) if (result != NULL) > + Py_INCREF (result); > + } > + } > + CATCH (except, RETURN_MASK_ALL) > + { > + if (except.reason < 0) > + gdbpy_convert_exception (except); > + return NULL; Should you use GDB_PY_HANDLE_EXCEPTION? The behavior is a little bit different than your code, in that it will only return if an exception was set. The Python doc says: "If the return value is NULL, an exception shall have been set.". Here, it's possible that we return NULL without having set an exception. Thanks, Simon