From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31198 invoked by alias); 15 Dec 2010 16:34:07 -0000 Mailing-List: contact archer-commits-help@sourceware.org; run by ezmlm Sender: Precedence: bulk List-Post: List-Help: List-Subscribe: Received: (qmail 31102 invoked by uid 306); 15 Dec 2010 16:34:06 -0000 Date: Wed, 15 Dec 2010 16:34:00 -0000 Message-ID: <20101215163406.31062.qmail@sourceware.org> From: tromey@sourceware.org To: archer-commits@sourceware.org Subject: [SCM] archer-swagiaal-oguz: cleanups in copy_py_list X-Git-Refname: refs/heads/archer-swagiaal-oguz X-Git-Reftype: branch X-Git-Oldrev: cfe32b5303f8a09ce72bb46de3297e64316b9c07 X-Git-Newrev: 7508a202caa1d05f6ebb0df3c359f27f7ff2ce14 X-SW-Source: 2010-q4/txt/msg00132.txt.bz2 List-Id: The branch, archer-swagiaal-oguz has been updated via 7508a202caa1d05f6ebb0df3c359f27f7ff2ce14 (commit) via f9d1f4aa50e70b9ef16ea9a3596cb2758b2516fb (commit) via b1bc690c3e0ab48e62c6d6617358f0cdcc1b234d (commit) via 68a784af97eec629ccdf59fd7020e3141b4ce736 (commit) from cfe32b5303f8a09ce72bb46de3297e64316b9c07 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 7508a202caa1d05f6ebb0df3c359f27f7ff2ce14 Author: Tom Tromey Date: Wed Dec 15 09:33:25 2010 -0700 cleanups in copy_py_list commit f9d1f4aa50e70b9ef16ea9a3596cb2758b2516fb Author: Tom Tromey Date: Wed Dec 15 09:32:12 2010 -0700 fix for gdbpy_selected_thread from master commit b1bc690c3e0ab48e62c6d6617358f0cdcc1b234d Author: Tom Tromey Date: Wed Dec 15 09:31:26 2010 -0700 fix for find_thread_object from master commit 68a784af97eec629ccdf59fd7020e3141b4ce736 Author: Tom Tromey Date: Wed Dec 15 09:22:20 2010 -0700 clean up evpy_emit_event ----------------------------------------------------------------------- Summary of changes: gdb/python/py-event.c | 31 +++++++++++++++++++++++-------- gdb/python/py-inferior.c | 3 +++ gdb/python/py-infthread.c | 7 ------- gdb/python/python.c | 11 ++++++++--- 4 files changed, 34 insertions(+), 18 deletions(-) First 500 lines of diff: diff --git a/gdb/python/py-event.c b/gdb/python/py-event.c index 65ac3f5..2c84be9 100644 --- a/gdb/python/py-event.c +++ b/gdb/python/py-event.c @@ -124,9 +124,8 @@ gdbpy_initialize_event (void) void evpy_emit_event (event_object *event) { - PyObject *callback_list; - PyObject *callback_list_copy; - PyObject *args_tuple; + PyObject *callback_list, *event_obj = (PyObject *) event; + PyObject *callback_list_copy = NULL; Py_ssize_t i; callback_list = (PyObject *) (event->registry->callbacks); @@ -137,15 +136,31 @@ evpy_emit_event (event_object *event) a notification. */ callback_list_copy = copy_py_list (callback_list); if (!callback_list_copy) - error(_("Cannot copy callback list.")); - - args_tuple = PyTuple_New ((Py_ssize_t) 1); - PyTuple_SetItem (args_tuple, (Py_ssize_t) 0, (PyObject *) event); + goto fail; for (i = 0; i < PyList_Size (callback_list_copy); i++) { - PyObject_CallObject (PyList_GET_ITEM (callback_list_copy, i), args_tuple); + PyObject *func = PyList_GetItem (callback_list_copy, i); + + if (func == NULL) + goto fail; + + if (!PyObject_CallFunctionObjArgs (func, event_obj, NULL)) + { + /* Print the trace here, but keep going -- we want to try to + call all of the callbacks even if one is broken. */ + gdbpy_print_stack (); + } } + + Py_XDECREF (callback_list_copy); + Py_XDECREF (event_obj); + return; + + fail: + gdbpy_print_stack (); + Py_XDECREF (callback_list_copy); + Py_XDECREF (event_obj); } static PyGetSetDef event_object_getset[] = diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c index c277335..e14b5da 100644 --- a/gdb/python/py-inferior.c +++ b/gdb/python/py-inferior.c @@ -206,6 +206,9 @@ find_thread_object (ptid_t ptid) PyObject *inf_obj; pid = PIDGET (ptid); + if (pid == 0) + return NULL; + inf_obj = find_inferior_object (pid); if (inf_obj) diff --git a/gdb/python/py-infthread.c b/gdb/python/py-infthread.c index 64f0a21..3e76519 100644 --- a/gdb/python/py-infthread.c +++ b/gdb/python/py-infthread.c @@ -173,13 +173,6 @@ gdbpy_selected_thread (PyObject *self, PyObject *args) { PyObject *thread_obj; - if (inferior_ptid.pid == 0) - { - PyErr_SetString (PyExc_RuntimeError, - _("No thread is currently selected.")); - return NULL; - } - thread_obj = (PyObject *) find_thread_object (inferior_ptid); if (thread_obj) { diff --git a/gdb/python/python.c b/gdb/python/python.c index 7c686d3..6f13a1e 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -163,10 +163,11 @@ compute_python_string (struct command_line *l) } /* Returns a a copy of the give LIST. - Creates a new reference which must be handeld by the caller. */ + Creates a new reference which must be handled by the caller. */ PyObject * -copy_py_list (PyObject *list){ +copy_py_list (PyObject *list) +{ int i; PyObject *new_list = PyList_New (0); @@ -174,7 +175,11 @@ copy_py_list (PyObject *list){ return NULL; for (i = 0; i < PyList_Size (list); i++) - PyList_Append (new_list, PyList_GET_ITEM (list, i)); + if (PyList_Append (new_list, PyList_GET_ITEM (list, i)) < 0) + { + Py_DECREF (new_list); + return NULL; + } return new_list; } hooks/post-receive -- Repository for Project Archer.