commit 19e779942dfac2794cc167bb29fffc91845dc83c
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Thu May 7 22:30:22 2020 +0100

    Fix for a crash when exiting an app:
    
    Activity.onPause() -> MessageSender.stopSending sets mThis to null, then a last message gets sent and a crash in newMessage().
    
    Fix this by
    
    1) making the Message inner class static (so that we can create a new one without a reference to mThis)
    2) move the locking from mThis (which is not final) to a specialized final Object mLock.

diff --git a/src/main/java/org/distorted/library/message/EffectMessageSender.java b/src/main/java/org/distorted/library/message/EffectMessageSender.java
index 815b4f2..e5d96de 100644
--- a/src/main/java/org/distorted/library/message/EffectMessageSender.java
+++ b/src/main/java/org/distorted/library/message/EffectMessageSender.java
@@ -31,7 +31,7 @@ import java.util.Vector;
  */
 public final class EffectMessageSender extends Thread
   {
-  private class Message
+  private static class Message
     {
     EffectListener mListener;
     long mEffectID;
@@ -42,9 +42,10 @@ public final class EffectMessageSender extends Thread
       mEffectID = effectID;
       }
     }
-  
-  private static Vector<Message> mList =null;
-  private static EffectMessageSender mThis=null;
+
+  private static final Object mLock        = new Object();
+  private static Vector<Message> mList     = null;
+  private static EffectMessageSender mThis = null;
   private static volatile boolean mNotify  = false;
   private static volatile boolean mRunning = false;
 
@@ -69,9 +70,9 @@ public final class EffectMessageSender extends Thread
       }
     else  
       {  
-      synchronized(mThis)
+      synchronized(mLock)
         {
-        mThis.notify();
+        mLock.notify();
         }
       }
     }
@@ -84,9 +85,9 @@ public final class EffectMessageSender extends Thread
 
     if( mThis!=null )
       {
-      synchronized(mThis)
+      synchronized(mLock)
         {
-        mThis.notify();
+        mLock.notify();
         }
       }
     }
@@ -105,12 +106,12 @@ public final class EffectMessageSender extends Thread
         tmp.mListener.effectFinished(tmp.mEffectID);
         }
 
-      synchronized(mThis)
+      synchronized(mLock)
         {
         if (!mNotify)
           {
-          try  { mThis.wait(); }
-          catch(InterruptedException ex) { }
+          try  { mLock.wait(); }
+          catch(InterruptedException ignored) { }
           }
         mNotify = false;
         }
@@ -133,14 +134,14 @@ public final class EffectMessageSender extends Thread
       for(int i=0; i<numListeners; i++)
         {
         EffectListener listener = effect.removeFirstListener();
-        Message msg = mThis.new Message(listener,id);
+        Message msg = new Message(listener,id);
         mList.add(msg);
         }
 
-      synchronized(mThis)
+      synchronized(mLock)
         {
         mNotify = true;
-        mThis.notify();
+        mLock.notify();
         }
       }
     }
