1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-01 08:17:38 +00:00

Add extra thread-related checking

* java/org/gnu/emacs/EmacsService.java (EmacsService)
(checkEmacsThread): New function.
(fillPolygon, drawRectangle, drawLine, drawPoint, copyArea)
(clearArea):
* java/org/gnu/emacs/EmacsThread.java (EmacsThread):
* java/org/gnu/emacs/EmacsView.java (EmacsView, swapBuffers):
Call where appropriate.
This commit is contained in:
Po Lu 2023-05-27 16:30:12 +08:00
parent d33bf0a0af
commit 327d2d0131
3 changed files with 36 additions and 1 deletions

View File

@ -100,6 +100,10 @@ public final class EmacsService extends Service
information. */
public static final boolean DEBUG_IC = false;
/* Flag that says whether or not to perform extra checks on threads
performing drawing calls. */
private static final boolean DEBUG_THREADS = false;
/* Return the directory leading to the directory in which native
library files are stored on behalf of CONTEXT. */
@ -309,10 +313,29 @@ invocation of app_process (through android-emacs) can
syncRunnable (runnable);
}
public static void
checkEmacsThread ()
{
if (DEBUG_THREADS)
{
if (Thread.currentThread () instanceof EmacsThread)
return;
throw new RuntimeException ("Emacs thread function"
+ " called from other thread!");
}
}
/* These drawing functions must only be called from the Emacs
thread. */
public void
fillRectangle (EmacsDrawable drawable, EmacsGC gc,
int x, int y, int width, int height)
{
checkEmacsThread ();
EmacsFillRectangle.perform (drawable, gc, x, y,
width, height);
}
@ -321,6 +344,7 @@ invocation of app_process (through android-emacs) can
fillPolygon (EmacsDrawable drawable, EmacsGC gc,
Point points[])
{
checkEmacsThread ();
EmacsFillPolygon.perform (drawable, gc, points);
}
@ -328,6 +352,7 @@ invocation of app_process (through android-emacs) can
drawRectangle (EmacsDrawable drawable, EmacsGC gc,
int x, int y, int width, int height)
{
checkEmacsThread ();
EmacsDrawRectangle.perform (drawable, gc, x, y,
width, height);
}
@ -336,6 +361,7 @@ invocation of app_process (through android-emacs) can
drawLine (EmacsDrawable drawable, EmacsGC gc,
int x, int y, int x2, int y2)
{
checkEmacsThread ();
EmacsDrawLine.perform (drawable, gc, x, y,
x2, y2);
}
@ -344,6 +370,7 @@ invocation of app_process (through android-emacs) can
drawPoint (EmacsDrawable drawable, EmacsGC gc,
int x, int y)
{
checkEmacsThread ();
EmacsDrawPoint.perform (drawable, gc, x, y);
}
@ -353,6 +380,7 @@ invocation of app_process (through android-emacs) can
int srcX, int srcY, int width, int height, int destX,
int destY)
{
checkEmacsThread ();
EmacsCopyArea.perform (srcDrawable, gc, dstDrawable,
srcX, srcY, width, height, destX,
destY);
@ -361,6 +389,7 @@ invocation of app_process (through android-emacs) can
public void
clearWindow (EmacsWindow window)
{
checkEmacsThread ();
window.clearWindow ();
}
@ -368,6 +397,7 @@ invocation of app_process (through android-emacs) can
clearArea (EmacsWindow window, int x, int y, int width,
int height)
{
checkEmacsThread ();
window.clearArea (x, y, width, height);
}

View File

@ -25,7 +25,7 @@
import android.os.Build;
import android.util.Log;
public class EmacsThread extends Thread
public final class EmacsThread extends Thread
{
private static final String TAG = "EmacsThread";

View File

@ -338,6 +338,7 @@ else if (child.getVisibility () != GONE)
public void
damageRect (Rect damageRect)
{
EmacsService.checkEmacsThread ();
damageRegion.union (damageRect);
}
@ -351,6 +352,10 @@ else if (child.getVisibility () != GONE)
Rect damageRect;
Bitmap bitmap;
/* Make sure this function is called only from the Emacs
thread. */
EmacsService.checkEmacsThread ();
damageRect = null;
/* Now see if there is a damage region. */