+2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+       * inferiors.c (for_each_inferior): Remove.
+       (clear_inferiors): Use for_each_thread.
+       * inferiors.h (for_each_inferior): Remove.
+       * linux-low.c (linux_wait_for_event_filtered): Use
+       for_each_thread.
+       (linux_stabilize_threads): Likewise.
+       * regcache.c (regcache_release): Likewise.
+       * server.c (gdb_wants_all_threads_stopped): Likewise.
+       (clear_pending_status_callback): Remove.
+       (handle_status): Use for_each_thread.
+       (captured_main): Likewise.
+       * win32-low.c (child_init_thread_list): Likewise.
+       (win32_clear_inferiors): Likewise.
+       (fake_breakpoint_event): Likewise.
+
 2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * inferiors.h (find_inferior): Remove.
 
 /* The current working directory used to start the inferior.  */
 static const char *current_inferior_cwd = NULL;
 
-void
-for_each_inferior (std::list<thread_info *> *thread_list,
-                  void (*action) (thread_info *))
-{
-  gdb_assert (thread_list == &all_threads);
-
-  for_each_thread ([&] (thread_info *thread) {
-    action (thread);
-  });
-}
-
 void
 for_each_inferior_with_data (std::list<thread_info *> *thread_list,
                             void (*action) (thread_info *, void *),
 void
 clear_inferiors (void)
 {
-  for_each_inferior (&all_threads, free_one_thread);
+  for_each_thread (free_one_thread);
   all_threads.clear ();
 
   clear_dlls ();
 
 
 void clear_inferiors (void);
 
-void for_each_inferior (std::list<thread_info *> *thread_list,
-                       void (*action) (thread_info *));
 void for_each_inferior_with_data (std::list<thread_info *> *thread_list,
                                  void (*action) (thread_info *, void *),
                                  void *data);
 
       /* Now that we've pulled all events out of the kernel, resume
         LWPs that don't have an interesting event to report.  */
       if (stopping_threads == NOT_STOPPING_THREADS)
-       for_each_inferior (&all_threads, resume_stopped_resumed_lwps);
+       for_each_thread (resume_stopped_resumed_lwps);
 
       /* ... and find an LWP with a status to report to the core, if
         any.  */
   stabilizing_threads = 1;
 
   /* Kick 'em all.  */
-  for_each_inferior (&all_threads, move_out_of_jump_pad_callback);
+  for_each_thread (move_out_of_jump_pad_callback);
 
   /* Loop until all are stopped out of the jump pads.  */
   while (find_thread (lwp_running) != NULL)
 
 regcache_release (void)
 {
   /* Flush and release all pre-existing register caches.  */
-  for_each_inferior (&all_threads, free_register_cache_thread);
+  for_each_thread (free_register_cache_thread);
 }
 #endif
 
 
   resume (resume_info, n);
 }
 
-/* Callback for for_each_inferior.  Make a new stop reply for each
+/* Callback for for_each_thread.  Make a new stop reply for each
    stopped thread.  */
 
 static void
 static void
 gdb_wants_all_threads_stopped (void)
 {
-  for_each_inferior (&all_threads, gdb_wants_thread_stopped);
+  for_each_thread (gdb_wants_thread_stopped);
 }
 
-/* Callback for for_each_inferior.  Clear the thread's pending status
-   flag.  */
-
-static void
-clear_pending_status_callback (thread_info *thread)
-{
-  thread->status_pending_p = 0;
-}
-
-/* Callback for for_each_inferior.  If the thread is stopped with an
+/* Callback for for_each_thread.  If the thread is stopped with an
    interesting event, mark it as having a pending event.  */
 
 static void
         reporting now pending.  They'll be reported the next time the
         threads are resumed.  Start by marking all interesting events
         as pending.  */
-      for_each_inferior (&all_threads, set_pending_status_callback);
+      for_each_thread (set_pending_status_callback);
 
       /* Prefer the last thread that reported an event to GDB (even if
         that was a GDB_SIGNAL_TRAP).  */
             (by the same GDB instance or another) will refresh all its
             state from scratch.  */
          discard_queued_stop_replies (minus_one_ptid);
-         for_each_inferior (&all_threads,
-                            clear_pending_status_callback);
+         for_each_thread ([] (thread_info *thread)
+           {
+             thread->status_pending_p = 0;
+           });
 
          if (tracing)
            {
 
 static void
 child_init_thread_list (void)
 {
-  for_each_inferior (&all_threads, delete_thread_info);
+  for_each_thread (delete_thread_info);
 }
 
 /* Zero during the child initialization phase, and nonzero otherwise.  */
   if (current_process_handle != NULL)
     CloseHandle (current_process_handle);
 
-  for_each_inferior (&all_threads, delete_thread_info);
+  for_each_thread (delete_thread_info);
   clear_inferiors ();
 }
 
   current_event.u.Exception.ExceptionRecord.ExceptionCode
     = EXCEPTION_BREAKPOINT;
 
-  for_each_inferior (&all_threads, suspend_one_thread);
+  for_each_thread (suspend_one_thread);
 }
 
 #ifdef _WIN32_WCE