server.el: Avoid nested runs of process filters (bug#71223)
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 30 May 2024 22:28:02 +0000 (18:28 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 30 May 2024 22:28:02 +0000 (18:28 -0400)
commit0d7d835902dfaeaae03850fb37e369833bb5664d
tree8cd61f0c74342d20f9569c0541213ca20cb07727
parentbaecf9bb283e52a829e31ae6f36c4687171a51c5
server.el: Avoid nested runs of process filters (bug#71223)

In case we have a "storm" of emacsclient requests coming at the
same time, our process filters ended up running nested within
each other, eating up the stack and causing errors.  Try and be
more careful with our use of `sit-for` in the process filter,
and make sure our process filters are run one at a time.

* lisp/server.el (server--message-sit-for): New function.
(server--process-filter-1): New function, extracted from
`server-process-filter`.  Use `server--message-sit-for` to display the
messages and use `run-with-timer` to delay the `delete-process`.
(server--process-filter-pending, server--process-filter-active): New vars.
(server--process-filter-all-pending): New function.
(server-process-filter): Use them.
lisp/server.el