int
apply_ext_lang_val_pretty_printer (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options,
void
restore_active_ext_lang (struct active_ext_lang_state *previous)
{
- const struct extension_language_defn *current = active_ext_lang;
-
active_ext_lang = previous->ext_lang;
if (target_terminal_is_ours ())
xfree (previous);
}
-/* Clear the quit flag.
- The flag is cleared in all extension languages,
- not just the currently active one. */
-
-void
-clear_quit_flag (void)
-{
- int i;
- const struct extension_language_defn *extlang;
-
- ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang)
- {
- if (extlang->ops->clear_quit_flag != NULL)
- extlang->ops->clear_quit_flag (extlang);
- }
-
- quit_flag = 0;
-}
-
/* Set the quit flag.
This only sets the flag in the currently active extension language.
If the currently active extension language does not have cooperative
&& active_ext_lang->ops->set_quit_flag != NULL)
active_ext_lang->ops->set_quit_flag (active_ext_lang);
else
- quit_flag = 1;
+ {
+ quit_flag = 1;
+
+ /* Now wake up the event loop, or any interruptible_select. Do
+ this after setting the flag, because signals on Windows
+ actually run on a separate thread, and thus otherwise the
+ main code could be woken up and find quit_flag still
+ clear. */
+ quit_serial_event_set ();
+ }
}
/* Return true if the quit flag has been set, false otherwise.
/* This is written in a particular way to avoid races. */
if (quit_flag)
{
+ /* No longer need to wake up the event loop or any
+ interruptible_select. The caller handles the quit
+ request. */
+ quit_serial_event_clear ();
quit_flag = 0;
result = 1;
}