[v2,01/12] Move start_event_loop out of event-loop.c

Message ID 20200314185158.7816-2-tom@tromey.com
State New
Headers show
Series
  • Merge event loop implementations
Related show

Commit Message

Tom Tromey March 14, 2020, 6:51 p.m.
A subsequent patch is going to move event-loop.c to gdbsupport.  In a
review of an earlier version of this series, Pedro pointed out that
the resulting code would be cleaner if start_event_loop were not
shared -- because gdb and gdbserver have some different needs here --
and so this moves start_event_loop to main.c.  Because the only caller
is there, it is also now static.

gdb/ChangeLog
2020-03-14  Tom Tromey  <tom@tromey.com>

	* event-loop.h (start_event_loop): Don't declare.
	* event-loop.c (start_event_loop): Move...
	* main.c (start_event_loop): ...here.  Now static.
---
 gdb/ChangeLog    |  6 ++++++
 gdb/event-loop.c | 54 ----------------------------------------------
 gdb/event-loop.h |  1 -
 gdb/main.c       | 56 ++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 62 insertions(+), 55 deletions(-)

-- 
2.17.2

Patch

diff --git a/gdb/event-loop.c b/gdb/event-loop.c
index af8f80b6a2c..36df4767aa9 100644
--- a/gdb/event-loop.c
+++ b/gdb/event-loop.c
@@ -318,60 +318,6 @@  gdb_do_one_event (void)
   return 1;
 }
 
-/* Start up the event loop.  This is the entry point to the event loop
-   from the command loop.  */
-
-void
-start_event_loop (void)
-{
-  /* Loop until there is nothing to do.  This is the entry point to
-     the event loop engine.  gdb_do_one_event will process one event
-     for each invocation.  It blocks waiting for an event and then
-     processes it.  */
-  while (1)
-    {
-      int result = 0;
-
-      try
-	{
-	  result = gdb_do_one_event ();
-	}
-      catch (const gdb_exception &ex)
-	{
-	  exception_print (gdb_stderr, ex);
-
-	  /* If any exception escaped to here, we better enable
-	     stdin.  Otherwise, any command that calls async_disable_stdin,
-	     and then throws, will leave stdin inoperable.  */
-	  SWITCH_THRU_ALL_UIS ()
-	    {
-	      async_enable_stdin ();
-	    }
-	  /* If we long-jumped out of do_one_event, we probably didn't
-	     get around to resetting the prompt, which leaves readline
-	     in a messed-up state.  Reset it here.  */
-	  current_ui->prompt_state = PROMPT_NEEDED;
-	  gdb::observers::command_error.notify ();
-	  /* This call looks bizarre, but it is required.  If the user
-	     entered a command that caused an error,
-	     after_char_processing_hook won't be called from
-	     rl_callback_read_char_wrapper.  Using a cleanup there
-	     won't work, since we want this function to be called
-	     after a new prompt is printed.  */
-	  if (after_char_processing_hook)
-	    (*after_char_processing_hook) ();
-	  /* Maybe better to set a flag to be checked somewhere as to
-	     whether display the prompt or not.  */
-	}
-
-      if (result < 0)
-	break;
-    }
-
-  /* We are done with the event loop.  There are no more event sources
-     to listen to.  So we exit GDB.  */
-  return;
-}
 
 
 /* Wrapper function for create_file_handler, so that the caller
diff --git a/gdb/event-loop.h b/gdb/event-loop.h
index 64f3712786d..52740c3b9af 100644
--- a/gdb/event-loop.h
+++ b/gdb/event-loop.h
@@ -80,7 +80,6 @@  typedef void (timer_handler_func) (gdb_client_data);
 
 /* Exported functions from event-loop.c */
 
-extern void start_event_loop (void);
 extern int gdb_do_one_event (void);
 extern void delete_file_handler (int fd);
 extern void add_file_handler (int fd, handler_func *proc, 
diff --git a/gdb/main.c b/gdb/main.c
index a03ed8117ab..67a3d0027e1 100644
--- a/gdb/main.c
+++ b/gdb/main.c
@@ -53,6 +53,7 @@ 
 #include "gdbtk/generic/gdbtk.h"
 #endif
 #include "gdbsupport/alt-stack.h"
+#include "observable.h"
 
 /* The selected interpreter.  This will be used as a set command
    variable, so it should always be malloc'ed - since
@@ -336,6 +337,61 @@  get_init_files (std::vector<std::string> *system_gdbinit,
   *local_gdbinit = localinit;
 }
 
+/* Start up the event loop.  This is the entry point to the event loop
+   from the command loop.  */
+
+static void
+start_event_loop ()
+{
+  /* Loop until there is nothing to do.  This is the entry point to
+     the event loop engine.  gdb_do_one_event will process one event
+     for each invocation.  It blocks waiting for an event and then
+     processes it.  */
+  while (1)
+    {
+      int result = 0;
+
+      try
+	{
+	  result = gdb_do_one_event ();
+	}
+      catch (const gdb_exception &ex)
+	{
+	  exception_print (gdb_stderr, ex);
+
+	  /* If any exception escaped to here, we better enable
+	     stdin.  Otherwise, any command that calls async_disable_stdin,
+	     and then throws, will leave stdin inoperable.  */
+	  SWITCH_THRU_ALL_UIS ()
+	    {
+	      async_enable_stdin ();
+	    }
+	  /* If we long-jumped out of do_one_event, we probably didn't
+	     get around to resetting the prompt, which leaves readline
+	     in a messed-up state.  Reset it here.  */
+	  current_ui->prompt_state = PROMPT_NEEDED;
+	  gdb::observers::command_error.notify ();
+	  /* This call looks bizarre, but it is required.  If the user
+	     entered a command that caused an error,
+	     after_char_processing_hook won't be called from
+	     rl_callback_read_char_wrapper.  Using a cleanup there
+	     won't work, since we want this function to be called
+	     after a new prompt is printed.  */
+	  if (after_char_processing_hook)
+	    (*after_char_processing_hook) ();
+	  /* Maybe better to set a flag to be checked somewhere as to
+	     whether display the prompt or not.  */
+	}
+
+      if (result < 0)
+	break;
+    }
+
+  /* We are done with the event loop.  There are no more event sources
+     to listen to.  So we exit GDB.  */
+  return;
+}
+
 /* Call command_loop.  */
 
 /* Prevent inlining this function for the benefit of GDB's selftests