Subject: Race condition in complete-in-region: should we be using pre-command-hook, not post-command-hook?
From: Daniel Colascione <[email-masked]>
To: "bug-gnu-ema >> bug-emacs" <[email-masked]>
Date: Fri, 28 Mar 2014 19:18:04 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

Say we're using a mode derived from comint that implements completion by
using the comint redirection functionality to send commands to the
process associated with the comint buffer. Say we have TAB bound to
complete-symbol. If the user presses TAB (to create a list of
completions) and then immediately presses RET to run comint-send-input,
we send the input to the subprocess, but don't wait for a reply. Then we
run post-command-hook; completion-in-region--postch is on the list of
hooks to run. This function runs completion-in-region-mode--predicate,
which makes a hidden call to the subprocess; this hidden call involves
writing a command waiting for a reply. But because we just sent the
*user* line in comint-send-input, we might actually read the response to
*that* line instead of the internal completion command, causing an
error. The response to the internal completion command then appears in
the comint buffer.

Why can't we do the completion-in-region--postch stuff in pre-command-hook?