fish-shell/src
ridiculousfish 3062994645 Implement cancel groups
This concerns how "internal job groups" know to stop executing when an
external command receives a "cancel signal" (SIGINT or SIGQUIT). For
example:

    while true
        sleep 1
    end

The intent is that if any 'sleep' exits from a cancel signal, then so would
the while loop. This is why you can hit control-C to end the loop even
if the SIGINT is delivered to sleep and not fish.

Here the 'while' loop is considered an "internal job group" (no separate
pgid, bash would not fork) while each 'sleep' is a separate external
command with its own job group, pgroup, etc. Prior to this change, after
running each 'sleep', parse_execution_context_t would check to see if its
exit status was a cancel signal, and if so, stash it into an int that the
cancel checker would check. But this became unwieldy: now there were three
sources of cancellation signals (that int, the job group, and fish itself).

Introduce the notion of a "cancellation group" which is a set of job
groups that should cancel together. Even though the while loop and sleep
are in different job groups, they are in the same cancellation group. When
any job gets a SIGINT or SIGQUIT, it marks that signal in its cancellation
group, which prevents running new jobs in that group.

This reduces the number of signals to check from 3 to 2; eventually we can
teach cancellation groups how to check fish's own signals and then it will
just be 1.
2020-09-03 11:01:27 -07:00
..
widecharwidth Incorporate widecharwidth changes for narrow emoji 2020-08-04 12:40:46 -07:00
ast.cpp Address some warnings from clangd 2020-08-29 12:02:18 +02:00
ast.h Allow newlines after && and || 2020-08-06 21:24:26 +02:00
ast_node_types.inc Introduce a new fish ast 2020-07-04 14:58:02 -07:00
autoload.cpp Don't eagerly fetch the current time in autoloading 2020-08-08 15:30:04 -07:00
autoload.h Run clang-format on all files 2019-10-13 15:50:48 -07:00
builtin.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_argparse.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_argparse.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_bg.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_bg.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_bind.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_bind.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_block.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_block.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_builtin.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_builtin.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_cd.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_cd.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_command.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_command.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_commandline.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_commandline.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_complete.cpp Remove the cursor position from highlighting 2020-08-11 17:42:30 -07:00
builtin_complete.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_contains.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_contains.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_disown.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_disown.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_echo.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_echo.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_emit.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_emit.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_eval.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_eval.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_exit.cpp Rework exit command 2020-08-15 16:06:54 -07:00
builtin_exit.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_fg.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_fg.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_function.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_function.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_functions.cpp Remove the cursor position from highlighting 2020-08-11 17:42:30 -07:00
builtin_functions.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_history.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_history.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_jobs.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_jobs.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_math.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_math.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_printf.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_printf.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_pwd.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_pwd.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_random.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_random.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_read.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_read.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_realpath.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_realpath.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_return.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_return.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_set.cpp Return no status from successful variable assignments 2020-08-05 12:23:49 -07:00
builtin_set.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_set_color.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_set_color.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_source.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_source.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_status.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_status.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_string.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_string.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_test.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_test.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_ulimit.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_ulimit.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_wait.cpp Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
builtin_wait.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
color.cpp Another formatting run 2020-06-24 20:43:56 +02:00
color.h [clang-tidy] Fix inconsistent declarations 2019-11-25 14:13:33 -08:00
common.cpp Bravely have read_blocked return after first read 2020-07-30 22:08:54 -07:00
common.h Eliminate wcs2str 2020-07-29 16:37:39 -07:00
complete.cpp Remove a wrapper around run_on_main_thread 2020-08-24 16:26:15 -07:00
complete.h Introduce operation_context_t 2020-01-16 15:21:28 -08:00
enum_set.h [cppcheck] add some std::move 2020-03-14 15:07:54 -07:00
env.cpp Add a $status_generation variable that's incremented for each interactive command that produces a status. 2020-08-05 12:23:49 -07:00
env.h Convert var_table_t to an unordered_map 2020-06-25 00:56:49 -05:00
env_dispatch.cpp Remove duplicated line 2020-09-02 17:37:32 +02:00
env_dispatch.h Run clang-format on all files 2019-10-13 15:50:48 -07:00
env_universal_common.cpp Eliminate wcs2str 2020-07-29 16:37:39 -07:00
env_universal_common.h Continued adoption of autoclose_fd_t and exec_close 2020-01-29 14:16:16 -08:00
event.cpp Remove some dead code and enable a test 2020-08-09 15:05:16 -07:00
event.h [cppcheck] add some std::move 2020-03-14 15:07:54 -07:00
exec.cpp Make the 'time' keyword a fixed property of a job. 2020-09-02 15:06:17 -07:00
exec.h Correct a misspeeling 2020-08-06 11:51:08 -07:00
expand.cpp Clean up expand_cmdsubst somewhat 2020-07-14 15:19:10 -07:00
expand.h [clang-tidy] remove redundant string initialization 2020-04-05 10:13:13 +02:00
fallback.cpp Remove lrand48 checks and support 2020-07-08 11:00:12 -07:00
fallback.h Remove lrand48 checks and support 2020-07-08 11:00:12 -07:00
fd_monitor.cpp [cppcheck] add const in several places 2020-03-14 15:07:54 -07:00
fd_monitor.h Include sys/select.h for fd_set 2020-02-12 22:02:32 +01:00
fish.cpp Rework exit command 2020-08-15 16:06:54 -07:00
fish_indent.cpp fish_indent: preserve semis in if and while conditions 2020-08-17 17:40:28 +02:00
fish_key_reader.cpp Exit key reader normally on help, version 2020-05-05 12:33:22 +08:00
fish_test_helper.cpp Add a test that nohup works 2020-08-10 12:26:30 -07:00
fish_tests.cpp Remove the cursor position from highlighting 2020-08-11 17:42:30 -07:00
fish_version.cpp Reformat all files 2019-05-05 12:09:25 +02:00
fish_version.h Revert "Generate FISH_BUILD_VERSION info for cmake builds" 2018-01-08 22:28:10 -08:00
flog.cpp Stop #include-ing wcstringutil.h in flog.h 2020-07-29 17:04:18 -07:00
flog.h Revert "Revert "Factor repainting decions from readline commands better in the reader"" 2020-08-23 15:31:57 -07:00
function.cpp Adopt the new AST in parse_execution 2020-07-04 14:58:05 -07:00
function.h Remove the old parser bits 2020-07-04 14:58:05 -07:00
future_feature_flags.cpp Migrate a bunch of code out of common.h 2020-01-15 13:16:43 -08:00
future_feature_flags.h Run clang-format on all files 2019-10-13 15:50:48 -07:00
global_safety.h Implement cancel groups 2020-09-03 11:01:27 -07:00
highlight.cpp Remove the cursor position from highlighting 2020-08-11 17:42:30 -07:00
highlight.h Remove the cursor position from highlighting 2020-08-11 17:42:30 -07:00
history.cpp Reduce copying in parse_util_detect_errors 2020-07-12 16:57:30 -07:00
history.h Avoid forming owning_lock of incomplete type in history 2020-05-22 13:36:46 -07:00
history_file.cpp [clang-tidy] change several member functions to const 2020-04-05 10:13:13 +02:00
history_file.h [clang-tidy] change several member functions to const 2020-04-05 10:13:13 +02:00
input.cpp Revert "Revert "Factor repainting decions from readline commands better in the reader"" 2020-08-23 15:31:57 -07:00
input.h [cppcheck] add const in several places 2020-03-14 15:07:54 -07:00
input_common.cpp [clang-tidy] performance 2020-04-05 10:13:13 +02:00
input_common.h Add forward-single-char input command 2020-08-01 12:09:31 +02:00
intern.cpp Remove a few less useful debug messages 2020-01-19 14:22:50 +01:00
intern.h restyle intern module to match project style 2016-05-01 20:28:46 -07:00
io.cpp Do not buffer builtin output if avoidable 2020-07-30 22:45:44 -07:00
io.h Support explicitly separated output on stderr 2020-07-30 23:00:34 -07:00
iothread.cpp Guard thread_local 2020-05-22 13:41:05 -07:00
iothread.h Introduce debounce_t 2020-03-06 17:15:21 -08:00
job_group.cpp Implement cancel groups 2020-09-03 11:01:27 -07:00
job_group.h Implement cancel groups 2020-09-03 11:01:27 -07:00
kill.cpp [clang-tidy] Use C++ using instead of C typedef 2019-11-29 23:46:51 -08:00
kill.h fix typos 2019-10-23 19:38:44 +02:00
lru.h Use unordered_map instead of map in lru 2020-08-08 15:32:06 -07:00
maybe.h Change builtins to return maybe_t<int> instead of int 2020-08-05 12:23:49 -07:00
null_terminated_array.cpp Change C casts to C++ ones 2020-05-01 13:30:56 -07:00
null_terminated_array.h Change C casts to C++ ones 2020-05-01 13:30:56 -07:00
operation_context.cpp Introduce operation_context_t 2020-01-16 15:21:28 -08:00
operation_context.h Rename job_tree to job_group 2020-05-30 14:22:44 -07:00
output.cpp Remove some dead code and enable a test 2020-08-09 15:05:16 -07:00
output.h camelCase to snake_case a function name 2020-08-23 03:38:25 -07:00
pager.cpp Fix a warning about ambiguous && and || in pager 2020-08-27 14:14:05 -07:00
pager.h Revert "Revert "Factor repainting decions from readline commands better in the reader"" 2020-08-23 15:31:57 -07:00
parse_constants.h Make parse_token_type_t an enum class 2020-07-09 14:22:04 -07:00
parse_execution.cpp Implement cancel groups 2020-09-03 11:01:27 -07:00
parse_execution.h Implement cancel groups 2020-09-03 11:01:27 -07:00
parse_tree.cpp Reduce copying in parse_util_detect_errors 2020-07-12 16:57:30 -07:00
parse_tree.h Reduce copying in parse_util_detect_errors 2020-07-12 16:57:30 -07:00
parse_util.cpp Teach up-line to cross empty lines 2020-08-29 12:02:18 +02:00
parse_util.h Reduce copying in parse_util_detect_errors 2020-07-12 16:57:30 -07:00
parser.cpp Implement cancel groups 2020-09-03 11:01:27 -07:00
parser.h Rework exit command 2020-08-15 16:06:54 -07:00
parser_keywords.cpp Simplify parser_keywords_is_reserved 2020-08-08 15:04:52 -07:00
parser_keywords.h Make IWYU output in lint.cpp less messy 2016-06-23 17:26:08 -07:00
path.cpp Stop #include-ing wcstringutil.h in flog.h 2020-07-29 17:04:18 -07:00
path.h Migrate a bunch of code out of common.h 2020-01-15 13:16:43 -08:00
postfork.cpp Bravely remove reclaim... param from continue_job, and rework tcsetpgrp calls 2020-07-27 14:51:37 -07:00
postfork.h Bravely remove reclaim... param from continue_job, and rework tcsetpgrp calls 2020-07-27 14:51:37 -07:00
print_help.cpp Run clang-format on all files 2019-10-13 15:50:48 -07:00
print_help.h restyle proc module to match project style 2016-05-02 22:07:58 -07:00
proc.cpp Implement cancel groups 2020-09-03 11:01:27 -07:00
proc.h Make the 'time' keyword a fixed property of a job. 2020-09-02 15:06:17 -07:00
reader.cpp Always check for fish_right_prompt's existence 2020-09-02 17:51:21 +02:00
reader.h Factor the exit state to make exit handlers more explicit 2020-08-30 15:09:31 -07:00
redirection.cpp Collapse io_data switch statements 2019-12-29 15:51:22 -08:00
redirection.h dup2_list_t::resolve_chain to stop returning maybe 2019-12-29 14:49:05 -08:00
sanity.cpp Change C casts to C++ ones 2020-05-01 13:30:56 -07:00
sanity.h Amend typos and grammar errors 2019-11-25 13:07:15 +01:00
screen.cpp camelCase to snake_case a function name 2020-08-23 03:38:25 -07:00
screen.h Correct pager size when command line soft-wraps 2020-07-05 08:55:17 +02:00
signal.cpp Simplify topic monitoring 2020-08-06 19:01:30 -07:00
signal.h Simplify topic monitoring 2020-08-06 19:01:30 -07:00
termsize.cpp Stop #include-ing wcstringutil.h in flog.h 2020-07-29 17:04:18 -07:00
termsize.h Eliminate the termsize handling from common.h 2020-06-07 20:00:42 -07:00
timer.cpp [clang-tidy] performance 2020-04-05 10:13:13 +02:00
timer.h Make "time" a job prefix 2020-01-03 01:07:49 -06:00
tinyexpr.cpp math: Implement tau 2020-08-26 17:48:58 +02:00
tinyexpr.h math: Complain about unknown *function*, not *variable* 2020-02-07 17:43:22 +01:00
tokenizer.cpp Remove preceding_escaped_nl 2020-07-07 13:48:35 -07:00
tokenizer.h Remove preceding_escaped_nl 2020-07-07 13:48:35 -07:00
topic_monitor.cpp topic_monitor to use binary semaphore instead of self-pipe 2020-08-20 14:58:18 -07:00
topic_monitor.h Correct a stale comment 2020-08-24 12:12:10 -07:00
trace.cpp [cppcheck] add const in several places 2020-03-14 15:07:54 -07:00
trace.h Add support for fish_trace variable to trace execution 2019-11-02 14:40:57 -07:00
utf8.cpp Change C casts to C++ ones 2020-05-01 13:30:56 -07:00
utf8.h [clang-tidy] Fix inconsistent declarations 2019-11-25 14:13:33 -08:00
util.cpp [clang-tidy] numeric literals to uppercase 2020-04-05 10:13:13 +02:00
util.h Return glob ordering to pre-3.1 state 2020-02-14 19:06:19 +01:00
wcstringutil.cpp Introduce wcs2string_callback 2020-07-29 19:36:20 -07:00
wcstringutil.h Introduce wcs2string_callback 2020-07-29 19:36:20 -07:00
wgetopt.cpp Remove some dead code and enable a test 2020-08-09 15:05:16 -07:00
wgetopt.h [clang-tidy] change several member functions to const 2020-04-05 10:13:13 +02:00
wildcard.cpp Apply clang-format 10 and selected lints from "make lint-all" 2020-07-01 00:44:06 +02:00
wildcard.h Correct the speeling of sentinel 2020-02-29 15:56:52 -08:00
wutil.cpp Remove some dead code and enable a test 2020-08-09 15:05:16 -07:00
wutil.h Remove some dead code and enable a test 2020-08-09 15:05:16 -07:00