Re: [RFC 8/8] mi/python: Allow redefinition of python MI commands

Jan Vrany
2019-05-03T15:26:57Z

On Thu, 2019-04-25 at 13:50 -0600, Tom Tromey wrote:
> > > > > > "Jan" == Jan Vrany <jan.vrany@fit.cvut.cz> writes:
>
> Jan> Redefining python MI commands is especially useful when developing
> Jan> then.
>
> It seems like this could lead to difficulties with dangling pointers.
> Some assurance on this would be good.

I'm not sure what exactly do you mean. However, I changed mi_command_py to
use gdbpy_ref<> instead of PyObject* (or even void*).

Therefore when one redefines the command:

+ if (mi_cmd_table.find (name) != mi_cmd_table.end ())
+ if (! mi_cmd_table[name]->can_be_redefined ())
+ return false;
+
+ mi_cmd_table[name] = std::move (command);

then the old command (if any) is destructed so Py_DECREF() is called on
Python objech held on by mi_command_py() instance.

I double checked by tracing it in GDB - I don't know how to write
the test for for this though.

Does above address your concern?

Thanks!

Jan

>
> Tom