clojure-emacs / logjam

An interactive, nrepl-oriented logging backend
Eclipse Public License 1.0
1 stars 0 forks source link

Don't let client slowness possibly block JVM threads #4

Open vemv opened 1 year ago

vemv commented 1 year ago

Context

As discussed in https://github.com/clojure-emacs/cider-nrepl/pull/773#discussion_r1227086600, it seems possible that given a slow- or buggy-enough client, sending logs from the JVM would actually block the given JVM thread that is performing the logging.

i.e., clojure code like:

(log/error :foo)

might block if Emacs happens to have some sort of issue. Which doesn't seem incredibly rare given Emacs' customizability.

Proposed solution

Make sure that the actual logging call happens from a thread executor. One communicates with said thread by message passing. One can check whether the thread is alive by using e.g. deref with its [ref timeout-ms timeout-val] extended signature.

And one could have a nrepl command for "resetting" the executor to a new one, which would help if it ever got stuck.

vemv commented 1 year ago

@r0man: this issue is kind of hypothetical, however it should be easy to check by intentionally blocking emacs with a M-: (while 1), and then trying to log from a repl in iTerm.