[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 21f36705266: Guarantee files are auto-saved when Emacs is termina
From: |
Po Lu |
Subject: |
master 21f36705266: Guarantee files are auto-saved when Emacs is terminated by Android |
Date: |
Wed, 8 Nov 2023 21:12:40 -0500 (EST) |
branch: master
commit 21f36705266934d5a351d4d7f360734540132139
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Guarantee files are auto-saved when Emacs is terminated by Android
* java/org/gnu/emacs/EmacsNative.java (shutDownEmacs):
* java/org/gnu/emacs/EmacsService.java (onDestroy): New
function. When invoked, call shut_down_emacs and await its
completion.
* src/android.c (android_shut_down_emacs, shutDownEmacs): New
functions.
---
java/org/gnu/emacs/EmacsNative.java | 4 ++++
java/org/gnu/emacs/EmacsService.java | 12 ++++++++++++
src/android.c | 19 +++++++++++++++++++
3 files changed, 35 insertions(+)
diff --git a/java/org/gnu/emacs/EmacsNative.java
b/java/org/gnu/emacs/EmacsNative.java
index f15927bb3a7..946a38f7f84 100644
--- a/java/org/gnu/emacs/EmacsNative.java
+++ b/java/org/gnu/emacs/EmacsNative.java
@@ -92,6 +92,10 @@ public final class EmacsNative
loadup.el itself. */
public static native void initEmacs (String argv[], String dumpFile);
+ /* Call shut_down_emacs to auto-save and unlock files in the main
+ thread, then return. */
+ public static native void shutDownEmacs ();
+
/* Abort and generate a native core dump. */
public static native void emacsAbort ();
diff --git a/java/org/gnu/emacs/EmacsService.java
b/java/org/gnu/emacs/EmacsService.java
index 1325cd85e9b..ab6d57b9c4f 100644
--- a/java/org/gnu/emacs/EmacsService.java
+++ b/java/org/gnu/emacs/EmacsService.java
@@ -321,6 +321,18 @@ public final class EmacsService extends Service
}
}
+ @Override
+ public void
+ onDestroy ()
+ {
+ /* This function is called immediately before the system kills
+ Emacs. In this respect, it is rather akin to a SIGDANGER
+ signal, so force an auto-save accordingly. */
+
+ EmacsNative.shutDownEmacs ();
+ super.onDestroy ();
+ }
+
/* Functions from here on must only be called from the Emacs
diff --git a/src/android.c b/src/android.c
index 3397ec0e740..f5af742b422 100644
--- a/src/android.c
+++ b/src/android.c
@@ -1938,6 +1938,25 @@ NATIVE_NAME (quit) (JNIEnv *env, jobject object)
kill (getpid (), SIGIO);
}
+/* Call shut_down_emacs subsequent to a call to the service's
+ onDestroy callback. CLOSURE is ignored. */
+
+static void
+android_shut_down_emacs (void *closure)
+{
+ __android_log_print (ANDROID_LOG_INFO, __func__,
+ "The Emacs service is being shut down");
+ shut_down_emacs (0, Qnil);
+}
+
+JNIEXPORT void JNICALL
+NATIVE_NAME (shutDownEmacs) (JNIEnv *env, jobject object)
+{
+ JNI_STACK_ALIGNMENT_PROLOGUE;
+
+ android_run_in_emacs_thread (android_shut_down_emacs, NULL);
+}
+
JNIEXPORT jlong JNICALL
NATIVE_NAME (sendConfigureNotify) (JNIEnv *env, jobject object,
jshort window, jlong time,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 21f36705266: Guarantee files are auto-saved when Emacs is terminated by Android,
Po Lu <=