nushell/crates
Devyn Cairns ab08328a30
Add Goodbye message to ensure plugins exit when they are no longer needed (#12014)
# Description

This fixes a race condition where all interfaces to a plugin might have
been dropped, but both sides are still expecting input, and the
`PluginInterfaceManager` doesn't get a chance to see that the interfaces
have been dropped and stop trying to consume input.

As the manager needs to hold on to a writer, we can't automatically
close the stream, but we also can't interrupt it if it's in a waiting to
read. So the best solution is to send a message to the plugin that we
are no longer going to be sending it any plugin calls, so that it knows
that it can exit when it's done.

This race condition is a little bit tricky to trigger as-is, but can be
more noticeable when running plugins in a tight loop. If too many plugin
processes are spawned at one time, Nushell can start to encounter "too
many open files" errors, and not be very useful.


# User-Facing Changes


# Tests + Formatting
- 🟢 `toolkit fmt`
- 🟢 `toolkit clippy`
- 🟢 `toolkit test`
- 🟢 `toolkit test stdlib`

# After Submitting

I will need to add `Goodbye` to the protocol docs
2024-02-28 20:41:22 -06:00
..
nu-cli Fix completions for directories with hidden files (#11921) 2024-02-26 12:14:19 -06:00
nu-cmd-base remove unused dependencies (#11938) 2024-02-22 16:31:37 -06:00
nu-cmd-dataframe Add columns to dataframe that are present in the schema but not present the Dataframe when applying schema. (#11987) 2024-02-26 17:22:33 -06:00
nu-cmd-extra add binary data handling to bits commands (#11854) 2024-02-28 20:43:50 +08:00
nu-cmd-lang Glob: don't allow implicit casting between glob and string (#11992) 2024-02-28 23:05:35 +08:00
nu-color-config open, rm, umv, cp, rm and du: Don't globs if inputs are variables or string interpolation (#11886) 2024-02-23 09:17:09 +08:00
nu-command add is-not-empty command as a QOL improvement (#11991) 2024-02-28 17:11:44 -06:00
nu-engine Remove some unnecessary static Vecs (#11947) 2024-02-24 20:58:01 +01:00
nu-explore Add Value::coerce_str (#11885) 2024-02-18 17:47:10 +01:00
nu-glob bump to dev release of nushell 0.90.2 (#11793) 2024-02-07 16:26:03 -06:00
nu-json bump to dev release of nushell 0.90.2 (#11793) 2024-02-07 16:26:03 -06:00
nu-lsp remove unused dependencies (#11938) 2024-02-22 16:31:37 -06:00
nu-parser Glob: don't allow implicit casting between glob and string (#11992) 2024-02-28 23:05:35 +08:00
nu-path bump to dev release of nushell 0.90.2 (#11793) 2024-02-07 16:26:03 -06:00
nu-plugin Add Goodbye message to ensure plugins exit when they are no longer needed (#12014) 2024-02-28 20:41:22 -06:00
nu-pretty-hex bump to dev release of nushell 0.90.2 (#11793) 2024-02-07 16:26:03 -06:00
nu-protocol Glob: don't allow implicit casting between glob and string (#11992) 2024-02-28 23:05:35 +08:00
nu-std open, rm, umv, cp, rm and du: Don't globs if inputs are variables or string interpolation (#11886) 2024-02-23 09:17:09 +08:00
nu-system bump to dev release of nushell 0.90.2 (#11793) 2024-02-07 16:26:03 -06:00
nu-table Bump fancy-regex from 0.12.0 to 0.13.0 (#11893) 2024-02-19 09:54:37 +08:00
nu-term-grid bump to dev release of nushell 0.90.2 (#11793) 2024-02-07 16:26:03 -06:00
nu-test-support Bump tempfile from 3.9.0 to 3.10.0 (#11977) 2024-02-26 15:38:11 +08:00
nu-utils fix format date based on users locale (#11908) 2024-02-20 11:08:49 -06:00
nu_plugin_custom_values Bidirectional communication and streams for plugins (#11911) 2024-02-25 16:32:50 -06:00
nu_plugin_example Remove Record::from_raw_cols_vals_unchecked (#11810) 2024-02-18 14:20:22 +02:00
nu_plugin_formats Add Value::coerce_str (#11885) 2024-02-18 17:47:10 +01:00
nu_plugin_gstat Name the Value conversion functions more clearly (#11851) 2024-02-17 18:14:16 +00:00
nu_plugin_inc Name the Value conversion functions more clearly (#11851) 2024-02-17 18:14:16 +00:00
nu_plugin_python Add Goodbye message to ensure plugins exit when they are no longer needed (#12014) 2024-02-28 20:41:22 -06:00
nu_plugin_query Add Value::coerce_str (#11885) 2024-02-18 17:47:10 +01:00
nu_plugin_stream_example Bidirectional communication and streams for plugins (#11911) 2024-02-25 16:32:50 -06:00
README.md Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00

Nushell core libraries and plugins

These sub-crates form both the foundation for Nu and a set of plugins which extend Nu with additional functionality.

Foundational libraries are split into two kinds of crates:

  • Core crates - those crates that work together to build the Nushell language engine
  • Support crates - a set of crates that support the engine with additional features like JSON support, ANSI support, and more.

Plugins are likewise also split into two types:

  • Core plugins - plugins that provide part of the default experience of Nu, including access to the system properties, processes, and web-connectivity features.
  • Extra plugins - these plugins run a wide range of different capabilities like working with different file types, charting, viewing binary data, and more.