This is the mail archive of the archer@sourceware.org mailing list for the Archer project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC][0/5] Python event handling


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



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]