Re: RDI code busy-waiting on running target?

Grant Edwards
2002-07-12T15:23:07Z

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

On Thu, Jul 11, 2002 at 06:43:43PM -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).
>
> Here's a patch that fixes it.

Here's a new version of the patch that does the sleep
unconditionally and uses select() instead of usleep().

--
Grant Edwards
grante@visi.com

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

diff -r -U8 gdb-5.2-orig/gdb/ChangeLog gdb-5.2/gdb/ChangeLog
--- gdb-5.2-orig/gdb/ChangeLog Fri Apr 26 20:05:21 2002
+++ gdb-5.2/gdb/ChangeLog Fri Jul 12 10:22:38 2002
@@ -1,8 +1,13 @@
+2002-07-11 Grant Edwards <grante@visi.com>
+
+ * rdi-share/ardi.c: add 10ms sleep 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
diff -r -U8 gdb-5.2-orig/gdb/rdi-share/ardi.c gdb-5.2/gdb/rdi-share/ardi.c
--- gdb-5.2-orig/gdb/rdi-share/ardi.c Thu Oct 12 17:56:31 2000
+++ gdb-5.2/gdb/rdi-share/ardi.c Fri Jul 12 10:17:37 2002
@@ -1409,16 +1409,20 @@
#endif

interrupt_request = FALSE;
stop_request = FALSE;

signal(SIGINT, ardi_sigint_handler);
while( executing )
{
+ struct timeval timeout = {0,10000};
+
+ select(0,0,0,0,&timeout);
+
if (ui_loop_hook)
ui_loop_hook(0);

if (interrupt_request || stop_request)
{
interrupt_target();
interrupt_request = FALSE;
stop_request = FALSE;