On Sun, Dec 18, 2022 at 1:57 AM Stefan Monnier <monnier@iro.umontreal.ca> wrote:

> I guess you can see it that way too.  So there are two ways to solve
> this:
>
> * only process-send-input in process filters makes sense
> * all but process-send-input in process filters makes sense

I assume you meant to write `process-send-string`, but I don't know what
you mean by the above (I understand neither bullets).

Yes, it's process-send-string.  I talked earlier about how I think sit-for and
accept-process-output are two primitives that could just error when
called from within a process filter, because there's no possible reasonable
use for them, because they lead to recursive filters and recursive filters
are arguably "unreasonable".  But process-send-string (without
output-acceptance) in a filter makes sense.  That's the first bullet.

The other bullet is that a-p-output and sit-for and even recursive filters may
make sense (if you know what you are doing, i suppose), but the common
case of sending a follow up message to a process (as a direct consequence
of the output just received) should _not_ be handled with an in-filter p-s-string,
but with something else, like the run-at-timer idea.  In that case we can keep
process-send-string's output acceptance.
 
> I'm more into of the first persuasion, but I think it shouldn't allow
> output to be accepted when called from within a process filter.

Indeed, as a general rule doing a "blocking wait", such as
`accept-process-output` from within async code (process filter, timer,
etc..) is generally undesirable.

I agree, but process-send-string is never blocking, is it?  And anyway
if we go your 'spawn' or 'run-asap' way, we don't need to change
process-send-string's output-acceptance semantics at all.

João