commit 9ef86c9fd5eac1597428a339af022f23d81dafc4
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Sep 15 10:37:59 2021 +0200

    On second thought, come back to Vector. The problem: before we had the potentially blocking function 'effectFinished' inside our synchronized block.

diff --git a/src/main/java/org/distorted/library/message/EffectMessageSender.java b/src/main/java/org/distorted/library/message/EffectMessageSender.java
index 985b43d..9da7004 100644
--- a/src/main/java/org/distorted/library/message/EffectMessageSender.java
+++ b/src/main/java/org/distorted/library/message/EffectMessageSender.java
@@ -21,7 +21,7 @@ package org.distorted.library.message;
 
 import org.distorted.library.effect.Effect;
 
-import java.util.ArrayList;
+import java.util.Vector;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 /**
@@ -43,9 +43,8 @@ public final class EffectMessageSender extends Thread
       }
     }
 
-  private static final Object mArrayLock   = new Object();
   private static final Object mLock        = new Object();
-  private static ArrayList<Message> mList  = null;
+  private static Vector<Message> mList     = null;
   private static EffectMessageSender mThis = null;
   private static volatile boolean mNotify  = false;
 
@@ -71,7 +70,7 @@ public final class EffectMessageSender extends Thread
 
       if( mThis==null )
         {
-        mList = new ArrayList<>();
+        mList = new Vector<>();
         mThis = new EffectMessageSender();
         mThis.start();
         }
@@ -103,15 +102,10 @@ public final class EffectMessageSender extends Thread
      
     while(mThis!=null)
       {
-      synchronized(mArrayLock)
+      while( mList.size()>0 )
         {
-        int size = mList.size();
-
-        for(int i=0; i<size; i++)
-          {
-          tmp = mList.remove(0);
-          tmp.mListener.effectFinished(tmp.mEffectID);
-          }
+        tmp = mList.remove(0);
+        tmp.mListener.effectFinished(tmp.mEffectID);
         }
 
       synchronized(mLock)
@@ -138,14 +132,11 @@ public final class EffectMessageSender extends Thread
       {
       long id = effect.getID();
 
-      synchronized(mArrayLock)
+      for(int i=0; i<numListeners; i++)
         {
-        for(int i=0; i<numListeners; i++)
-          {
-          EffectListener listener = effect.removeFirstListener();
-          Message msg = new Message(listener,id);
-          mList.add(msg);
-          }
+        EffectListener listener = effect.removeFirstListener();
+        Message msg = new Message(listener,id);
+        mList.add(msg);
         }
 
       synchronized(mLock)
@@ -171,7 +162,7 @@ public final class EffectMessageSender extends Thread
       {
       if( mThis==null )
         {
-        if( mList==null ) mList = new ArrayList<>();
+        if( mList==null ) mList = new Vector<>();
         mThis = new EffectMessageSender();
         mThis.start();
         }
