I ran the following commands on my phone in termux and in Kitty on my PC 10 times each and record the results. I did it multiple times because the results seem random.

 ./src/emacs --fg-daemon -Q
 ./lib-src/emacsclient path/to/no-perms # in a separate terminal, 10 times

Phone + Termux: 9 out of 10 times, I got the expected results where the terminal was not broken and I saw an error message. on the 10th time there was some weird behavior, but I haven't been able to reproduce it and I don't remember what happened.

PC + Kitty: there were no crashes meaning the terminal wasn't broken anymore. but 6 out of 10 times the error message didn't print. sometimes all I saw was "waiting for emacs..." and some other times all I saw was "...". the other four times was expected behavior colon the error message printed and the terminal wasn't broken.

Note: I have a slightly different environment on my phone compared to the first time. when I first reported the bug I was using the emacs and emacsclient programs located on my phone. this time I used the modified emacs and emacsclient from my desktop over SSH. I don't know if that changed the results. But the bug with unmodified emacs happens just the same over SSH as with emacs on my phone.

On Mon, May 22, 2023, 09:30 Eli Zaretskii <eliz@gnu.org> wrote:
> From: Adam Ibrahim <ibrahimadam193@gmail.com>
> Date: Sun, 21 May 2023 14:57:03 -0400
>
> output of `ls -l`:
>
>  ls -l no-perms
>  ---------- 1 u0_a331 u0_a331 0 May 21 14:27 no-perms
>
> commands used:
>
>  emacs --fg-daemon -Q
>  emacsclient no-perms # in a separate terminal
>
> what stops working: when I type, the letters I type don't appear in the terminal anymore. nothing is
> echoed back to me. stuff still happens, and I can enter commands, but I can't see anything. And the
> terminal width seems screwed up. like things that should get indented, they don't look right.

Thanks.  Please try the patch below and see if it solves the problem
without adding any new ones.

diff --git a/lisp/server.el b/lisp/server.el
index eaf24a770e4..7e35eaa6176 100644
--- a/lisp/server.el
+++ b/lisp/server.el
@@ -1138,6 +1138,11 @@ server-process-filter
       (server-log "Authentication failed" proc)
       (server-send-string
        proc (concat "-error " (server-quote-arg "Authentication failed")))
+      (unless (eq system-type 'windows-nt)
+        (let ((terminal (process-get proc 'terminal)))
+          ;; Only delete the terminal if it is non-nil.
+          (when (and terminal (eq (terminal-live-p terminal) t))
+           (delete-terminal terminal))))
       ;; Before calling `delete-process', give emacsclient time to
       ;; receive the error string and shut down on its own.
       (sit-for 1)
@@ -1459,6 +1464,11 @@ server-return-error
      proc (concat "-error " (server-quote-arg
                              (error-message-string err))))
     (server-log (error-message-string err) proc)
+    (unless (eq system-type 'windows-nt)
+      (let ((terminal (process-get proc 'terminal)))
+        ;; Only delete the terminal if it is non-nil.
+        (when (and terminal (eq (terminal-live-p terminal) t))
+         (delete-terminal terminal))))
     ;; Before calling `delete-process', give emacsclient time to
     ;; receive the error string and shut down on its own.
     (sit-for 5)