Commit graph

19 commits

Author SHA1 Message Date
Sönke Ludwig e28c6950d7 Fix shutdown behavior.
- Detection of the main thread contained a race condition
- The exit flag monitor task that is started for each event loop wasn't shut down, so that many could be running if runEventLoop was called multiple times.
2017-01-13 22:11:59 +01:00
Sönke Ludwig 8c0660781d Thread safety improvements in the task system.
Removes some invalid safety annotations and adds a workaround for a starvation issue in Task.join() across threads boundaries. This is still not thread-safe, but now has a safety-net and is documented, so that it doesn't get lost.
2016-12-19 20:24:08 +01:00
Sönke Ludwig bf2edc7fb2 Fix TaskScheduler.waitAndProcess to not block if any tasks were resumed.
In situations where no events were involved in an multi-task scenario, the old behavior could lead to the process to starve or hang until an event arrived.
2016-12-10 14:13:44 +01:00
Sönke Ludwig 942089a91c Add unit tests for joinding tasks from outside of another task. 2016-11-29 19:17:14 +01:00
Sönke Ludwig c08f101549 Update for eventcore 0.5.0 and the latest DMD beta. 2016-10-24 08:22:49 +02:00
Sönke Ludwig 1337715b2d Remove unused code. 2016-10-06 22:05:07 +02:00
Sönke Ludwig e294d24a4b Update for latest eventcore version. 2016-10-05 14:40:29 +02:00
Sönke Ludwig 930ba5c3de Fix safety annotation issues. 2016-10-04 17:51:49 +02:00
Sönke Ludwig 19f796af9f Add vibe.core.runApplication. See rejectedsoftware/vibe.d#1417. 2016-08-30 12:30:49 +02:00
Sönke Ludwig 1005f5c674 Fix all ManualEvent related tests. 2016-06-17 22:33:04 +02:00
Sönke Ludwig ed36531bd2 Add runEventLoopOnce() and fix hibernate() to block outside of a task. 2016-06-16 10:44:55 +02:00
Sönke Ludwig 8264070f19 Fix for latest eventcore changes. 2016-06-14 09:25:28 +02:00
Sönke Ludwig 3b0e4e0452 Big refactoring step.
- Moves a lot of stuff from vibe.core.core to vibe.core.task
- Introduces TaskScheduler to unify the scheduling process
- Refines how tasks are scheduled and processed (can push to the front of the task queue and uses a marker task to keep track of the spot up to which to process)
- Start to add proper support for task interrupts and timeouts by properly cancelling in-flight async operations
- Work on ManualEvent - still not functional for the shared case
- Implement proper IP address parsing in NetworkAddress
2016-06-14 08:01:03 +02:00
Sönke Ludwig c3857d1bc9 Fix compile errors. 2016-04-10 17:17:30 +02:00
Sönke Ludwig 77dc93baa7 Add a function to disable vibe.d's default signal handlers. Fixes #1333.
(cherry picked from commit 29fab2e10bb864a8aee694d4a9de8f26fab2363e)
2016-04-10 14:40:40 +02:00
Sönke Ludwig 76626f2fd4 Add support for FreeBSD and NetBSD
(cherry picked from commit 546fe60d327886265d3d14b447123010621013f6)
2016-04-10 14:40:39 +02:00
Sönke Ludwig 8f4222916f Weaken the task double-resumption assertion condition.
This assertion got triggered in a number of harmless situations and it's not always easy to avoid. Trying to avoid it, it has already caused a rather bad task starvation bug (#1441), so at this point it seems to be better to get rid of it.

See also #1407

(cherry picked from commit 621e34b388848c762a7525149ea449ad082996a1)
2016-04-10 14:40:39 +02:00
Sönke Ludwig 3a6583b375 Explictly avoid double-resumption of tasks during Libevent2TCPConnection.close().
The previous fix for #1376 resulted in a possible task starvation when the peer reset the connection before the outbound buffer was drained. The new approach now always resumes the waiting task exactly once, no matter how many events happen and no matter in which order.

(cherry picked from commit 350130a2b05cfbf12764ffaa6a86403eacf172d9)
2016-04-10 14:40:38 +02:00
Sönke Ludwig 7e2d1dd038 Initial commit.
The library is able to support simple TCP servers in the current state. The API is still mostly compatible with mainline vibe.d, but the driver systen has been replaced by the eventcore library and sockets/files/timers/... are now structs with automatic reference counting instead of GC collected classes. The stream interfaces have been removed for now.
2016-03-01 20:30:42 +01:00