emacs-diffs
[Top][All Lists]
Advanced

[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,



reply via email to

[Prev in Thread] Current Thread [Next in Thread]