Commit graph

20 Commits

Autor SHA1 Nachricht Datum
Wesley Wolfe
3307d489da Fix Future task waiting logic. Fixes BUKKIT-2408
Previously, the timeout would erroneously get converted to milliseconds
twice. The second conversion was removed.

Spurious wakeups were not handled properly, and would instead throw a
TimeoutException even if the waited time was not reached..
2012-08-26 10:25:11 -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
137880b727 Deprecation cleanup. 2012-02-18 13:06:12 -05:00
Dinnerbone
43492ab6af Revert "Do not immediately re-queue repeating tasks, or they may simply keep repeating on this tick, until the 35ms time limit runs out." See 3632d99122 (commitcomment-478252)
This reverts commit 3632d99122e8795cadb8f94e14e42eb4aa6d7c4c.
2011-07-14 23:21:28 +01:00
Afforess
4a932c11de Do not immediately re-queue repeating tasks, or they may simply keep repeating on this tick, until the 35ms time limit runs out. 2011-07-14 15:49:23 -04:00
EvilSeph
49df44ad6c Possible fix for cancelled CraftScheduler tasks still running. 2011-06-30 13:42:18 -04: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
Erik Broes
483a878b8b Update for 1.4_00_01 -- if you bypassed Bukkit, you will most likely break. 2011-04-20 19:05:14 +02:00
sk89q
ac9f297445 Don't want the scheduler taking invalid arguments as well. 2011-04-18 23:52:19 -07:00
sk89q
a450dcbb83 Fixed CraftScheduler to catch exceptions thrown by tasks, rather than crash the server. 2011-04-18 23:48:16 -07:00
Tahg
078f48c0fb Code cleanup, fixed doors, chunk entity fetching 2011-03-11 16:25:35 -05:00
Andrew Ardill
30d1a5d3fd returning if a thread is not alive should happen before any changes to
the list of workers, hence the return statement should be in the
synchronized block.
2011-02-21 16:32:41 +11:00
Andrew Ardill
6269c1e633 implementation of isQueued() 2011-02-21 16:32:40 +11: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
Raphfrk
973d61c418 Allows calling of functions in the main thread 2011-02-13 22:12:26 -05:00
Raphfrk
9715e77852 Fixes a deadlock issue in CraftScheduler 2011-02-13 00:55:58 -05: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