Re: RDI code busy-waiting on running target?

Grant Edwards
2002-07-11T23:40:00Z

[-- Attachment #1: Type: text/plain, Size: 553 bytes --]

On Thu, Jul 11, 2002 at 05:58:56PM -0500, Grant Edwards wrote:

> I've noticed that gdb uses all the CPU it can get while the
> target is running (e.g. busy-waiting 'till target stops).
>
> I'm building 5.2 to see if it still does that

Yup.

Here's a patch that fixes it. I only added the usleep() when
there's no ui_loop_hook to call. Is that the right thing to
do, or will Insight et al still suck CPU time? I'm not sure
who's supposed to be surrendering the CPU, the UI or the
target.

Is usleep() portable?

--
Grant Edwards
grante@visi.com

[-- Attachment #2: rdi-busy-wait.patch --]
[-- Type: text/plain, Size: 1296 bytes --]

diff -r -U8 gdb-5.2/gdb/ChangeLog gdb-5.2-mod/gdb/ChangeLog
--- gdb-5.2/gdb/ChangeLog Fri Apr 26 20:05:21 2002
+++ gdb-5.2-mod/gdb/ChangeLog Thu Jul 11 18:39:18 2002
@@ -1,8 +1,14 @@
+2002-09-11 Grant Edwards <grante@visi.com>
+
+ * rdi-share/ardi.c: add 10ms sleep (iff there's no
+ ui_loop_hook) to busy-wait loop when target is
+ running.
+
2002-04-26 GDB Administrator <gdbadmin@sourceware.cygnus.com>

GDB 5.2 Released.
* version.in: Update to version 5.2.

2002-04-26 Michal Ludvig <mludvig@suse.cz>

* x86-64-tdep.c (x86_64_skip_prologue): Print note when debugging
Only in gdb-5.2-mod/gdb: ChangeLog~
diff -r -U8 gdb-5.2/gdb/rdi-share/ardi.c gdb-5.2-mod/gdb/rdi-share/ardi.c
--- gdb-5.2/gdb/rdi-share/ardi.c Thu Oct 12 17:56:31 2000
+++ gdb-5.2-mod/gdb/rdi-share/ardi.c Thu Jul 11 18:28:58 2002
@@ -1411,16 +1411,18 @@
interrupt_request = FALSE;
stop_request = FALSE;

signal(SIGINT, ardi_sigint_handler);
while( executing )
{
if (ui_loop_hook)
ui_loop_hook(0);
+ else
+ usleep(10000);

if (interrupt_request || stop_request)
{
interrupt_target();
interrupt_request = FALSE;
stop_request = FALSE;
}
Adp_AsynchronousProcessing( async_block_on_nothing );