diff options
author | Wesley Wolfe <weswolf@aol.com> | 2012-06-13 21:28:13 -0500 |
---|---|---|
committer | Wesley Wolfe <weswolf@aol.com> | 2012-06-13 23:01:03 -0500 |
commit | 9e73a8887c5f142abbc7a324df17d167b2427478 (patch) | |
tree | 81c8f495b0474b3f77802f9e2f5967c9c4783de1 /src/main/java/org/bukkit/plugin/SimplePluginManager.java | |
parent | ef1748ef6823ddc036bbaa64013ec70e7145a63a (diff) | |
download | bukkit-9e73a8887c5f142abbc7a324df17d167b2427478.tar bukkit-9e73a8887c5f142abbc7a324df17d167b2427478.tar.gz bukkit-9e73a8887c5f142abbc7a324df17d167b2427478.tar.lz bukkit-9e73a8887c5f142abbc7a324df17d167b2427478.tar.xz bukkit-9e73a8887c5f142abbc7a324df17d167b2427478.zip |
Support asynchronous events; Addresses BUKKIT-1212
Diffstat (limited to 'src/main/java/org/bukkit/plugin/SimplePluginManager.java')
-rw-r--r-- | src/main/java/org/bukkit/plugin/SimplePluginManager.java | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java index e017ffdf..ca780fca 100644 --- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java +++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java @@ -443,11 +443,28 @@ public final class SimplePluginManager implements PluginManager { } /** - * Calls an event with the given details + * Calls an event with the given details.<br> + * This method only synchronizes when the event is not asynchronous. * * @param event Event details */ - public synchronized void callEvent(Event event) { + public void callEvent(Event event) { + if (event.isAsynchronous()) { + if (Thread.holdsLock(this)) { + throw new IllegalStateException(event.getEventName() + " cannot be triggered asynchronously from inside synchronized code."); + } + if (server.isPrimaryThread()) { + throw new IllegalStateException(event.getEventName() + " cannot be triggered asynchronously from primary server thread."); + } + fireEvent(event); + } else { + synchronized (this) { + fireEvent(event); + } + } + } + + private void fireEvent(Event event) { HandlerList handlers = event.getHandlers(); RegisteredListener[] listeners = handlers.getRegisteredListeners(); |