This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [patch] Support inferior events in python
- From: Tom Tromey <tromey at redhat dot com>
- To: sami wagiaalla <swagiaal at redhat dot com>
- Cc: gdb-patches at sourceware dot org
- Date: Thu, 03 Feb 2011 14:42:08 -0700
- Subject: Re: [patch] Support inferior events in python
- References: <4D2342A2.7060102@redhat.com> <m3d3oczb0t.fsf@fleche.redhat.com> <4D34AF3F.4090006@redhat.com> <m37he0g95v.fsf@fleche.redhat.com> <4D39FFFD.80304@redhat.com> <m3zkqldnlw.fsf@fleche.redhat.com> <4D49C69A.20401@redhat.com> <m3d3naf7bg.fsf@fleche.redhat.com> <4D4ADA8A.40507@redhat.com>
>>>>> "Sami" == sami wagiaalla <swagiaal@redhat.com> writes:
Sami> Added. I also, documented StopEvent. In events which inherit from
Sami> others I added a statement asking the reader to refer to the
Sami> parent. Do you think that is enough, or should the inherited
Sami> attributes be restated ?
I think it is sufficient to mention the superclass.
Sami> +int
Sami> +emit_stop_event (struct bpstats *bs, enum target_signal stop_signal)
Sami> +{
Sami> + PyObject *stop_event_obj = NULL; /* Appease GCC warning. */
Sami> +
Sami> + if (evregpy_no_listeners_p (gdb_py_events.stop))
Sami> + return 0;
Sami> + if (bs && bs->breakpoint_at
Sami> + && bs->breakpoint_at->type == bp_breakpoint)
I think this logic is too restrictive.
What if we change what breakpoints are reflected to Python?
That is, I think the check for bp_breakpoint should be removed.
Instead, you could just have it check ->py_bp_object.
But if you are doing that you should either rearrange, or just get rid
of gdbpy_breakpoint_from_bpstats, to either preserve the abstraction or
remove it.
Sami> + PyObject *breakpoint = gdbpy_breakpoint_from_bpstats (bs);
Sami> + if (breakpoint != NULL)
Sami> + stop_event_obj =
Sami> + create_breakpoint_event_object (breakpoint);
Sami> + if (!stop_event_obj)
Sami> + goto fail;
This could result in a "fail" without an error being set.
But the above change should eliminate that.
Sami> +PyObject *
Sami> +create_thread_event_object (PyTypeObject *py_type)
Sami> +{
Sami> + PyObject *thread_event_obj = create_event_object (py_type);
Sami> + PyObject *thread = get_event_thread();
Missing space.
Sami> +
Sami> + if (!thread_event_obj || !thread)
Sami> + goto fail;
You have to do error checks after each Python call, you can't batch them.
Either: create_event_object can fail, in which case it is not ok to call
get_event_thread on failure; or, create_event_object can return NULL but
not set a Python exception, in which case you must set one explicitly.
Tom