On 12/08/2011 11:40 AM, Hui Zhu wrote: > Hi guys, > > I am sorry that I didn't talk clear about the issue of tstatus. > When we use tstatus, it can auto set the tracepoint back to stop when > it full or got error. Then user can use tstart without tstop that set > loc->inserted. So we will still meet that issue if we just set > loc->inserted in tstop. > > For examp: > This gdb is just set loc->inserted in tstop but not tstatus. > (gdb) tstart > (gdb) tstop > (gdb) tstart > (gdb) tstop > (gdb) tstart > xxx > xxx > (gdb) tstatus > Trace stopped because the buffer was full. > Buffer contains 0 trace frames (of 49072 created total). > Trace buffer has 908408 bytes of 10414080 bytes free (91% full). > Trace will stop if GDB disconnects. > Not looking at any trace frame. > (gdb) tstart > ../../src/gdb/tracepoint.c:1770: internal-error: start_tracing: > Assertion `!loc->inserted' failed. > A problem internal to GDB has been detected, > further debugging may prove unreliable. > Quit this debugging session? (y or n) n > > ../../src/gdb/tracepoint.c:1770: internal-error: start_tracing: > Assertion `!loc->inserted' failed. > A problem internal to GDB has been detected, > further debugging may prove unreliable. > Create a core file of GDB? (y or n) n > This is the 2nd version of my patch. Compared with 1st version (sent four hours ago), this version covers more cases. In this patch, a new observer `trace_stopped' is added. In stop_tracing and target_get_trace_status, observer `trace_stopped' is notified, and then, `inserted' flag is cleared. This looks more clear than version 1. Tested again on x86_64-linux. No regression. -- Yao (齐尧)