16 Commits

Author SHA1 Message Date
md_5
0c24068ad6
Organise imports 2021-03-09 08:47:33 +11:00
md_5
97b0057ad3 SPIGOT-4500: callSyncMethod broken 2018-11-24 17:52:29 +11:00
md_5
8cd538e661 SPIGOT-4498: Crash on startup 2018-11-23 14:20:59 +11:00
md_5
ec937d0e07 SPIGOT-4472: Add Consumer scheduler methods 2018-11-23 11:40:18 +11:00
Senmori
9f49ad60e7 Remove magic values in scheduler package 2018-03-26 15:34:33 +11:00
blablubbabc
bde2a93cfe Add BukkitTask#isCancelled 2017-09-02 17:04:29 +10:00
Wesley Wolfe
092800af26 Fixed some async tasks running synchronously. Fixes BUKKIT-2934
Additionally refactored cancel method to be more object-oriented.
2012-11-14 16:47:21 -06:00
Wesley Wolfe
93a79cd0e6 Implement new scheduler API. Adds BUKKIT-836
The implementation for the new methods mimics the old methods. The final
call for the old methods now maps to the new methods with an additional
call to get id.
2012-10-14 01:21:58 -05:00
Wesley Wolfe
27d58a299c Add information about async tasks to CrashReports. Addresses BUKKIT-2491
Async tasks are notorious for causing CMEs and corrupted data when
accessing the API. This change makes a linked list to track recent tasks
that may no longer be running. It is accessed via the toString method on
the scheduler. This behavior is not guaranteed, but it is accessible as
such currently.

Although toString is located in the scheduler, its contract does not
guarantee an accurate or up to date call when accessed from a second
thread.
2012-09-09 00:34:41 -05:00
Wesley Wolfe
dcd01bf0c0 Rewrite scheduler. Fixes BUKKIT-1831, and BUKKIT-845
The new scheduler uses a non-blocking methodology. Combining volatile
references to make a linked reference chain, with the atomic reference
handling the tail, tasks are queued without waiting for locks. The main
thread will no longer limit the length of time spend for scheduled tasks,
but no task will run twice in the same tick. Scheduling a new task inside of
a synchronous task will always run the new task during the same tick,
assuming there is no supplied delay > 0.

Asynchronous tasks are now run using a thread pool. Any thread-local
implemenation should now account for threads being reused between
executions.

Race conditions were carefully examined and the order of logic is now very
important. Each task is placed in a secondary collection before removal from
primary collections. Thus, by reading tasks from the collections in the same
order they travel, it retains state-safety. This does make modifications
less responsive in some situations, as the task may be transitioning before
the modifier accesses it. This cost outweighs the requirement to synchronize
on the scheduler; previously any conflict would be first-come-first-serve,
with the main thread backing out arbitrarily.
2012-08-22 16:41:46 -05:00
Erik Broes
9adc03abab Generic cleanup of the org.bukkit.craftbukkit classes. 2011-06-12 12:51:54 +02:00
Erik Broes
309846d732 Whitespace + general cleanup 2011-05-15 13:41:46 +02:00
Raphfrk
fdb077e814 Improved the Scheduler.
Adds nag message when async tasks are not properly shut down and adds a limiter for sync tasks. Once they use 35ms in a single tick, any remaining tasks are not executed until later ticks. Adds a method to report the pending tasks and one to report active worker threads
2011-05-02 02:40:07 -04:00
Andrew Ardill
dc45946163 implementation of isCurrentlyRunning(int taskId);
Burrows down to the worker thread assigned to this task, and returns
its alive status. If no such thread exists, then the task is not
running!
2011-02-17 13:27:54 +11:00
Erik Broes
50e42496e3 @Override interface implementation is 1.6 exclusively 2011-02-07 11:03:56 +01:00
Raphfrk
9e7991ab52 Scheduler 2011-02-07 01:03:32 +01:00