]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix DEBUG_THREADS in the Android port
authorPo Lu <luangruo@yahoo.com>
Wed, 7 Feb 2024 13:09:18 +0000 (21:09 +0800)
committerEshel Yaron <me@eshelyaron.com>
Wed, 7 Feb 2024 19:59:33 +0000 (20:59 +0100)
* java/org/gnu/emacs/EmacsService.java (EmacsService): New field
`mainThread'.
(onCreate): Set `mainThread' to the thread where the service's
looper executes.
(checkEmacsThread): Compare against SERVICE.mainThread.

(cherry picked from commit e5cb268b2cf612492dfaf39d28f43357710003a6)

java/org/gnu/emacs/EmacsService.java

index 93e34e6e694d5239b164b4922454ceaccbd7a0fd..b65b10b952832c4b653f571cd6ca3a021d406b98 100644 (file)
@@ -136,6 +136,10 @@ public final class EmacsService extends Service
      been created yet.  */
   private EmacsSafThread storageThread;
 
+  /* The Thread object representing the Android user interface
+     thread.  */
+  private Thread mainThread;
+
   static
   {
     servicingQuery = new AtomicInteger ();
@@ -236,6 +240,7 @@ public final class EmacsService extends Service
                          / metrics.density)
                         * pixelDensityX);
     resolver = getContentResolver ();
+    mainThread = Thread.currentThread ();
 
     /* If the density used to compute the text size is lesser than
        160, there's likely a bug with display density computation.
@@ -384,7 +389,13 @@ public final class EmacsService extends Service
   {
     if (DEBUG_THREADS)
       {
-       if (Thread.currentThread () instanceof EmacsThread)
+       /* When SERVICE is NULL, Emacs is being executed non-interactively.  */
+       if (SERVICE == null
+           /* It was previously assumed that only instances of
+              `EmacsThread' were valid for graphics calls, but this is
+              no longer true now that Lisp threads can be attached to
+              the JVM.  */
+           || (Thread.currentThread () != SERVICE.mainThread))
          return;
 
        throw new RuntimeException ("Emacs thread function"