This is the mail archive of the
archer@sourceware.org
mailing list for the Archer project.
Re: [RFC][0/5] Python event handling
- From: Richard Ward <richard dot j dot ward1 at googlemail dot com>
- To: Oguz Kayral <oguzkayral at gmail dot com>
- Cc: archer at sourceware dot org
- Date: Thu, 24 Sep 2009 02:52:42 +0100
- Subject: Re: [RFC][0/5] Python event handling
- References: <36a35d480908230834y46a44e08od4645db444bb5e7a@mail.gmail.com>
Oguz Kayral wrote:
Hi,
This patch series adds inferior event handling support to GDB Python
scripting.
Hi Oguz, I've been looking forward to this functionality, Good stuff!
I have a few comments though, if you don't mind.
Firstly two (fairly unimportant) things about the function registration.
I think it would be nice if you could give upvalues to the registration
function (similar to gobject's `connect'), though admittedly it is very
easy to fake that in python using a class that defines __call__.
Also, I'm not sure whether this would ever be an issue but it seems
advantageous to have the registration function return a unique object or
number that could subsequently be used to unregister your callable,
rather than using the callable object itself.
Next, in python-stopevent.c:
emit_stop_event (struct bpstats *bs, const char *stop_signal)
{
/*...snip...*/
for (i = 0; i < PyList_Size (callback_list); i++)
{
PyObject_CallObject (PyList_GET_ITEM (callback_list, i), args_tuple);
}
}
A couple of issues with this. First, PyObject_Callback returns a new
reference which is the return value of the function (or NULL), so it
must be handled otherwise it will leak.
Secondly the user code may throw an exception, or the object may not be
callable. The exception should be cleared, and it would be nice to also
print the exception (PyErr_Print does both).
Most important here though is the iteration through the list. If the
user disconnects a callback from inside a callback then the some
callbacks could be skipped. It could be better to copy the list first,
but that could still lead to some confusing behaviour, for example a
callback being called after the user thinks it ought to have been
disconnected.
Thanks,
Richard