mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 11:25:35 +00:00
loader: Prevent deadlock using tab completion.
If tab completion using ast_module_helper is attempted during startup, deadlock will ensue because the CLI will attempt to lock the module list while it is already locked by the loader. This causes deadlock because when the loader tries to acquire the CLI lock, they are blocked on each other. Waiting for startup to complete is not feasible because the CLI lock is acquired while waiting, so deadlock will ensure regardless of whether or not a lock on the module list is attempted. To prevent deadlock, we immediately abort if tab completion is attempted on the module list before Asterisk is fully booted. ASTERISK-30039 #close Change-Id: Idd468906c512bb196631e366a8f597a0e2e9271d
This commit is contained in:
committed by
Kevin Harwell
parent
64a764c33e
commit
3e8629454a
@@ -1382,6 +1382,11 @@ char *ast_module_helper(const char *line, const char *word, int pos, int state,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Tab completion can't be used during startup, or CLI and loader will deadlock. */
|
||||
if (!ast_test_flag(&ast_options, AST_OPT_FLAG_FULLY_BOOTED)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (type == AST_MODULE_HELPER_LOAD) {
|
||||
module_load_helper(word);
|
||||
|
||||
|
Reference in New Issue
Block a user