Commit graph

480 commits

Author SHA1 Message Date
Sönke Ludwig 5437b9ecb6
Merge pull request #129 from vibe-d/run_worker_task_h
Implement runWorkerTaskDistH.
2019-01-26 18:04:22 +01:00
Sönke Ludwig a54fa6b7de Implement runWorkerTaskDistH.
Variant of runWorkerTask that allows to get the handles of the created tasks.
2019-01-26 18:02:47 +01:00
Sönke Ludwig 177e761716
Merge pull request #128 from WebFreak001/fix-net-regression
remove refsLeft assert
2019-01-23 21:22:55 +01:00
WebFreak001 611505c038 remove refsLeft assert
It seems when running in a vibe-d app that the assert fails
Even though I would like there to be a check, closing the vibe.d
app afterwards shows no leaked handles so I think it's fine.
2019-01-22 20:16:38 +01:00
Sönke Ludwig 1284858d2c Avoid TLS overhead for TimerCallbackH and make it fully private. 2019-01-22 19:46:52 +01:00
Sönke Ludwig b5ccb784a1 Allow Task.interrupt to be called within a yieldLock. 2019-01-22 18:06:55 +01:00
Sönke Ludwig 03ffe70dc1 Revert to execute timer callbacks in tasks and add createLeanTimer instead.
Fixes #125.
2019-01-22 18:06:55 +01:00
Sönke Ludwig 1a87ee5b3f Make yieldLock() safe and nothrow. 2019-01-22 18:06:54 +01:00
Sönke Ludwig 857be9459e Improve convenience of the Channel API.
- allows all methods to be called on a `shared(Channel!T)` instance.
- `Channel` pre-defines the `buffer_size` argument to 100, matching `createChannel`
2019-01-22 10:50:46 +01:00
Sönke Ludwig 27ec5fe2d2 Bump version number. 2019-01-20 14:50:56 +01:00
Sönke Ludwig 3503001ec6 Add contract to Channel.consumeAll to force the input buffer to be empty. 2019-01-20 14:31:29 +01:00
The Dlang Bot c21e1aa06d
Merge pull request #25 from vibe-d/channels
Implement typed cross-task channels
merged-on-behalf-of: Leonid Kramer <l-kramer@users.noreply.github.com>
2019-01-20 13:51:36 +01:00
Sönke Ludwig 48908a7f15 Bump version number. 2019-01-20 13:26:44 +01:00
Sönke Ludwig 3be1de2fdb Refine the semantics of consumeAll. 2019-01-20 11:57:16 +01:00
Sönke Ludwig 568cdb112b
Merge pull request #116 from WebFreak001/fix-115
release ref on failing connectTCP
2019-01-19 15:06:39 +01:00
Sönke Ludwig 28260bd612 Use a robust check IP vs. host name check for resolveHost. Fixes #117. 2019-01-16 22:31:14 +01:00
Sönke Ludwig f31db98144 Add documentation, basic unit test, createChannel(), close() and tryConsumeOne(). 2019-01-14 22:16:45 +01:00
Sönke Ludwig dee54e505a Make FixedRingBuffer compatible with non-copyable structs. 2019-01-14 22:15:38 +01:00
Sönke Ludwig 82936041e4 Add some more notes. 2019-01-14 20:42:31 +01:00
Sönke Ludwig bce39e512c Implement a simple thread-safe cross-task channel. 2019-01-14 20:42:31 +01:00
The Dlang Bot 8edca75696
Merge pull request #119 from vibe-d/issue-118-interruptible-task-mutex-use
Improve robustness of the sync module. Fixes #118.
merged-on-behalf-of: Leonid Kramer <l-kramer@users.noreply.github.com>
2019-01-14 20:21:04 +01:00
Sönke Ludwig 2f552ac408 Properly handle directory watcher creation failures. 2019-01-14 14:59:03 +01:00
Sönke Ludwig 9583df3c44 Preserve times and attributes in copyFile. 2019-01-14 14:59:02 +01:00
Sönke Ludwig dfd7d97225 Fix parameter documentation syntax. Fixes #103. 2019-01-14 10:22:13 +01:00
Sönke Ludwig cccf45cfea Add a motivational introduction to the sync module.
Especially mention the issues of using `core.sync.*`.
2019-01-14 10:22:13 +01:00
Sönke Ludwig 6c0bdf2976 Add documentation and unittest example to scopedMutexLock. 2019-01-14 10:22:12 +01:00
Sönke Ludwig fb64c07d3c Make scopedMutexLock work with InterruptibleTaskMutex. 2019-01-14 10:22:12 +01:00
Sönke Ludwig 452fa411c2 Avoid overload conflict when using TaskMutex together with InterruptibleTaskCondition. 2019-01-14 10:22:12 +01:00
Sönke Ludwig ffa5bd5c58 Add a trap to detect invalid uses of InterruptibleTaskMutex in conjunction with synchronized. 2019-01-14 10:22:12 +01:00
Sönke Ludwig c899798be7 Avoid blocking copy in moveFile. 2019-01-14 00:34:15 +01:00
WebFreak001 4d4401c31f Fix assert not compiling in releaseRef 2019-01-09 00:28:27 +01:00
WebFreak001 9d6b34c73a release ref on failing connectTCP
fix #115
2019-01-09 00:18:43 +01:00
Benjamin Schaaf 12a8825f86
Fix error message in FileStream.write 2019-01-07 10:26:16 +11:00
Sönke Ludwig e5ce1394b1 Bump version number. 2018-12-28 14:09:14 +01:00
The Dlang Bot e5d53249fc
Merge pull request #113 from vibe-d/file_truncate
Add FileStream.truncate
merged-on-behalf-of: Sönke Ludwig <s-ludwig@users.noreply.github.com>
2018-12-28 14:03:19 +01:00
Sönke Ludwig f35e8f1d69 Add FileStream.truncate. 2018-12-28 10:14:50 +01:00
Hiroki Noda a408aac808 Use monotonic clock for timeout 2018-12-24 06:22:53 +09:00
Sönke Ludwig 0d3338a16b
Merge pull request #111 from WebFreak001/fix-110
Make waitForData not assert fail on close fix #110
2018-12-20 10:14:08 +01:00
WebFreak001 bc3b319783 Fix potential crash if context is null on closed socket
If the other side closes the connection this might happen
Without this check the following m_context.readBuffer would segfault
2018-12-20 02:20:41 +01:00
WebFreak001 c8ab6ae2f8 Make waitForData not assert fail on close fix #110 2018-12-20 02:10:40 +01:00
Mathias L. Baumann e2834a245b UDP connect wrongly passes port as addr family to resolveHost 2018-12-08 10:14:59 +01:00
Sönke Ludwig 26b6190743 Bump version number. 2018-11-23 22:28:33 +01:00
Sönke Ludwig b5442b5efd Make sure that pending but unreferenced timers still invoke their callback. Fixes #104. 2018-11-23 15:52:18 +01:00
Sönke Ludwig aca672416c Fix host name conversion code for SyslogLogger.
See vibe-d/vibe.d#2220
2018-11-07 09:41:57 +01:00
Martin Nowak 277e998167 fix relying on implicit const conversion of JSONValue
- "key" in JSONValue returns const(JSONValue)*
- fromValue expected non-const JSONValue
- implicit conversion of const(JSONValue) to JSONValue to be fixed
  with https://github.com/dlang/phobos/pull/6716
2018-11-01 12:59:44 +01:00
Sönke Ludwig c3272f7d1f Fix assertion in SpinLock when called from a signal handler.
Since the signal handler can be called in any thread of the application, it may happen so in a non-D thread where Thread.getThis() returns null. This change works around this and also removes the need to call SpinLock.setup on thread startup.
2018-10-30 12:39:08 +01:00
Sönke Ludwig 8c4b147605 Bump version number. 2018-10-27 20:14:09 +02:00
Sönke Ludwig f5665aa7c1 Fix compilation on older DMD frontends. 2018-10-27 16:31:59 +02:00
Sönke Ludwig 78fef30310 Implement callback based timers without relying on a task. Fixes #86.
In the previous implementation, the callback tasks were starving as soon as the last external reference to a non-pending timer was given up.
2018-10-27 15:48:21 +02:00
Sönke Ludwig 6caff0b105 Fix synchronization and shutdown issues in TaskPool.
- terminate() would hang if called from a worker thread because it would attempt to self-join
- the handleWorkerTasks could miss signal emits, resulting in a hanging task queue or a missed termination signal
2018-10-27 00:42:06 +02:00
Sönke Ludwig 9a4217cd88
Merge pull request #95 from vibe-d/remove_task_pool_event_loop
Avoid starting an explicit event loop in worker threads.
2018-10-23 21:54:51 +02:00
Sönke Ludwig 849bca4855 Avoid starting an explicit event loop in worker threads.
This reduces the overhead of task pool threads slightly and simplifies stack traces in case of errors.
2018-10-23 11:27:28 +02:00
Sönke Ludwig eae11d3ba3 Fix deprecation warnings on DMD 2.082.0 2018-10-23 11:25:54 +02:00
Sönke Ludwig c4af4b2a02 Fix WindowsPath.bySegment of an empty path returning a bogus empty segment. 2018-10-01 21:54:29 +02:00
Sönke Ludwig 2480f6bb67 Allow switchToTask to be called within a yield lock.
Enables waking up other tasks from within a yield lock (executed after the yield lock is lifted).
2018-09-09 11:35:39 +02:00
Sönke Ludwig 897fee84ea Free resources associated with waitForDataAsync as early as possible.
Instead of letting the GC clean up at an undefined point in time.
2018-09-03 13:45:53 +02:00
Sönke Ludwig 0b638634c9 Fix waitForDataAsync compilation error for callbacks that have scoped destruction. 2018-09-03 12:35:05 +02:00
Sönke Ludwig 9b2aa13ef4 Fix possible infinite loop in TaskScheduler.process.
Fixes a discrepancy in TaskFiberQueue between empty and length, which causes process() to never return, thus processing events without timeout indefinitely.
2018-08-26 13:03:14 +02:00
Sönke Ludwig fae7d3e93d
Revert non-compiling change. 2018-07-09 11:58:25 +02:00
Sönke Ludwig 20558e4416
Update change log and bump version number 2018-07-09 09:20:55 +02:00
Sönke Ludwig 5f18693c49
Mark the Path(Segment) constructor as nothrow. 2018-07-09 09:19:35 +02:00
Sönke Ludwig 360f129381
Fix typo 2018-07-09 09:18:59 +02:00
Anton Fediushin 7514f1183e Fix logger colours to make it look good on black and white background 2018-06-09 15:54:24 +02:00
Sönke Ludwig ecb46db199 Bump version number. 2018-06-05 12:45:01 +02:00
Sönke Ludwig 61bfbbbac3
Merge pull request #81 from vibe-d/fix_no_loop_message_processing
Fix event processing when calling yield() outside of an event loop.
2018-06-05 12:44:12 +02:00
Sönke Ludwig 463f4e4efb Disable graceful shutdown for SIGABRT on Windows.
Since this is meant specifically for killing the process in bad program states, invoking the normal event loop shutdown code is too risky.
2018-06-05 12:01:20 +02:00
Sönke Ludwig ebd7cd7393 Fix event processing when calling yield() outside of an event loop.
The exit flag was erroneously set, disabling any event processing during yield() calls when not inside an event loop.
2018-06-05 11:37:58 +02:00
Sönke Ludwig dfd3d2fd70
Bump version number 2018-04-08 17:58:16 +02:00
Sönke Ludwig d4c5620d70
Merge pull request #77 from Boris-Barboris/manualevent_overflow
fix integer overflow protection absence for LocalManualEvent
2018-04-08 17:21:14 +02:00
Sönke Ludwig fd92a7f555 Fix Task.running and Task.yield directly after runTask/yieldLock.
The status of the task was erroneously reported as not running until the task was actually executed for the first time (which only happens after the yield lock has been lifted).
2018-04-08 01:30:43 +02:00
Boris-Barboris 788973f628 same measures for ManualEvent 2018-03-30 12:59:24 +00:00
Boris-Barboris bf9d736c4f another way around. Fix typo in comment. 2018-03-30 10:06:44 +00:00
Boris-Barboris 489b35539b fix comparison in doWait 2018-03-30 09:28:45 +00:00
Boris-Barboris a840c51c5d fix integer overflow protection absence for LocalManualEvent 2018-03-30 09:17:09 +00:00
Boris-Barboris eea57f8914 MonoTime in loopWithTimeout, and other read tweaks.
MonoTime is more robust and does not involve sophisticated timezone
shenanigans, making it better suited for networking operations.
Fixes #39.
This commit also distinguishes read timeout exception as Exception child
ReadTimeoutException, wich is thrown from loopWithTimeout function.
Optimistic read branch for tcp socket improves performance on
granular reads.
2018-03-23 06:45:05 +00:00
Sönke Ludwig 2006ace251 Bump version number 2018-03-18 21:36:23 +01:00
Sönke Ludwig e2eef799f8 Fix cancellation of connectTCP in case of early errors.
Certain errors will result in an invalid handle to be returned from eventDriver.sockets.connectStream. In that case it is invalid to call cancelConnect.

Also adds an additional debug log message including a stack trace in case of exceptions thrown from connection handlers.
2018-03-18 12:13:13 +01:00
Sönke Ludwig 88bcae036c
Merge pull request #74 from vibe-d/fix_multithread_destruction
Allow destructors to run in foreign threads. Fixes #69.
2018-03-18 11:09:43 +01:00
Sönke Ludwig 58dc8459c2
Merge pull request #73 from vibe-d/interfaceproxy_tests
Add unit test for postblit behavior of InterfaceProxy.
2018-03-17 14:30:13 +01:00
Sönke Ludwig 2c63aa5c5c Allow destructors to run in foreign threads. Fixes #69.
This change modifies destructors to anticipate that they can be called form a foreign thread if the GC is involved. The actual release of the reference will then happen deferred in the original thread.
2018-03-16 18:06:53 +01:00
Sönke Ludwig 967654f175 Add unit test for postblit behavior of InterfaceProxy. 2018-03-16 18:00:56 +01:00
Thomas Weyn b7e0194414 Re-introduced setCommandLineArgs from vibe-d:core-0.8.2 (pull/1916) 2018-03-14 22:04:20 +01:00
Sönke Ludwig 8ee5f4460c Fix compilation of ConnectionPool!struct. Fixes vibe-d/vibe.d#2109.
ConnectionPool!TCPConnection used to work with the old vibe-d:core implementation, but now failed, because TCPConnection is a struct. All assumptions about `Connection` being a class have been remove in this commit.
2018-03-11 00:07:42 +01:00
Sönke Ludwig eb3620056f Ensure async lambdas are templates to fix LDC linker errors. Fixes #65.
If the lambda is a concrete function, two different versions will end up for it in the final binary on macOS when compiled with LDC. Using argument inference works around that issue.
2018-03-08 14:24:22 +01:00
Sönke Ludwig a1a0d52fe6
Merge pull request #67 from vibe-d/issue_66_yield_exit_eventloop
Don't exit event loop prematurely.
2018-03-07 10:39:55 +01:00
Sönke Ludwig 7703cc675f Fix a race-condition in TaskPool.
The lock that should surround the foreach loop was given up prematurely.
2018-03-07 10:39:28 +01:00
Sönke Ludwig 66c9aeea57 Don't exit event loop prematurely. Fixes #66.
Idle processing needs to check whether there are still tasks scheduled to be resumed before setting the exit flag when there are no more waiters (I/O etc.).
2018-03-06 23:41:56 +01:00
Sönke Ludwig eb046e2295 Fix deprecation warnings on DMD 2.079.0. 2018-03-06 20:13:59 +01:00
Sönke Ludwig 595beb2c60 Bump version number. 2018-02-26 20:40:28 +01:00
Sönke Ludwig 6aa5cddf33
Merge pull request #62 from FraMecca/master
TCPConnection.waitForDataAsync
2018-02-26 20:33:53 +01:00
Sönke Ludwig 57d516a82b
fixup 2018-02-26 19:40:13 +01:00
Sönke Ludwig e33cf567ec
Change callback semantics of waitForDataAsync
Also adds a documentation comment to specify the semantics.
2018-02-26 13:15:24 +01:00
Francesco Mecca 99e2873cc0 assert and stronger condition on TCPConnection.waitForDataAsync
assert and stronger condition on TCPConnection.waitForDataAsync
2018-02-24 21:32:54 +01:00
Francesco Mecca 20e32cf327 added Timer and enum return to TCPConnection.waitForDataAsync 2018-02-23 00:27:04 +00:00
Sönke Ludwig 2653c8c5e0 Always remove task from queue when switching to it. Fixes #58.
Previously the task was only removed if switchTo was called from another task. Now it also gets removed when switchTo (e.g. due to a runTask() call) gets called form outside of a task.
2018-02-23 01:25:13 +01:00
Sönke Ludwig d2146e3881 Fix shutdown of the worker thread pool.
Shuts down the pool before terminating the threads to avoid accessing an event thread waiter slot that is not associated with a valid eventcore driver anymore.
2018-02-22 20:10:08 +01:00
Sönke Ludwig ae0b326fbd Remove noisy log message. 2018-02-22 14:09:20 +01:00
Francesco Mecca 0d6ba62f51 added TCPConnection.waitForDataAsync 2018-02-21 22:17:18 +00:00
Sönke Ludwig e4eaaddbba Make high-frequency log messages in the task scheduler optional.
Requires -debug=VibeTaskLog to enable them now.
2018-02-14 13:11:51 +01:00
Sönke Ludwig 59b25701ac Remove DMD 2.070.x compatibility code. 2018-02-14 13:10:34 +01:00
Sönke Ludwig ff26c31a42
Merge pull request #46 from vibe-d/total_cpus
Use std.parallelism.totalCPUs to implement logicalProcessorCount.
2018-02-14 13:09:02 +01:00
Sönke Ludwig 83515e4055
Merge pull request #51 from wilzbach/hexstring
Replace deprecated hexstring with hexString
2018-02-14 13:08:30 +01:00
Pavel Chebotarev 13e6c2aa41 Fix incorrect return value in TCPConnection.leastSize() 2018-01-27 18:53:16 +03:00
Sebastian Wilzbach 6107c1d807 Replace deprecated hexstring with hexString 2018-01-25 08:43:13 +01:00
Martin Nowak 30102f9e3a avoid Buffer type which creates a huge __initZ symbol 2018-01-14 04:43:14 +01:00
Sönke Ludwig 1ed1c85f76 Use std.parallelism.totalCPUs to implement logicalProcessorCount.
See vibe-d/vibe.d#2008.
2018-01-10 18:28:26 +01:00
Sebastian Wilzbach 0eed0fe8b7 Use the stable stdx-allocator DUB package 2017-12-03 20:38:07 +01:00
Sönke Ludwig 2625397f91 Use asyncAwaitAny instead of asyncAwait to work around linker error. 2017-11-25 15:27:17 +01:00
Boris-Barboris 6634cbc645 switch to asyncAwait 2017-11-25 15:27:17 +01:00
Boris-Barboris 55e7866497 implement tcp connect timeout 2017-11-25 15:27:17 +01:00
Sönke Ludwig dad84e8a46 Adjust DirectoryWatcher implementation for changed FileChange definition in eventcore. 2017-11-21 21:42:44 +01:00
Sönke Ludwig 8c68a4aeef Bump version number. 2017-11-17 11:56:59 +01:00
Sönke Ludwig 094de42f97 Update change log. 2017-11-17 11:56:18 +01:00
Sönke Ludwig 2a106ebcbb Add FileInfo.hidden. 2017-11-07 16:14:02 +01:00
Sönke Ludwig fc89257afd
Fixup for c95306245f. 2017-10-31 23:04:13 +01:00
Sönke Ludwig c95306245f
Improve InterfaceProxy(Class).
- InterfaceProxyClass can now be allocated/freed using a custom allocator
- Non-copyable values can be moved into an InterfaceProxyClass instance
- Non-copyable values can be moved into an InterfaceProxy
2017-10-30 23:01:22 +01:00
Sönke Ludwig b68d23f515
Add opCast(bool) to FreeListRef and remove opAssign with value type. 2017-10-30 22:58:30 +01:00
Sönke Ludwig ecd981b1e1
Fix compile error in internal API. 2017-10-30 22:56:19 +01:00
Sönke Ludwig 340357d455
Let pipe() return the number of bytes written. 2017-10-30 22:55:54 +01:00
Sönke Ludwig 710c996666
Add assertion message. 2017-10-30 22:55:22 +01:00
Sönke Ludwig 874e174d38 Add const overload for Task.tid. 2017-10-24 09:44:54 +02:00
Sönke Ludwig db449e3cb3 Fix implementation of TCPListener.bindAddress. 2017-09-28 23:52:39 +02:00
Sönke Ludwig 72540d7eaf Work around DigitalMars/optlink#18. 2017-09-27 17:43:08 +02:00
Sönke Ludwig 9fe9783443 Convert Waitable from struct to pure template to avoid heap closures.
Also fixes a case where ThreadLocalWaiter.emitSingle overlaps a call to .emit.
2017-09-27 16:41:11 +02:00
Sönke Ludwig e32d818873 Add CircularDList.insertAfter. 2017-09-27 16:41:11 +02:00
Sönke Ludwig a93b6e1cb1 Move log message to print before shutdown to avoid potential mixup with other log messages during shutdown. 2017-09-21 14:35:53 +02:00
Sönke Ludwig 9e0b5a7821 Fix access violation in the log module when called from a non-D thread. 2017-09-21 14:09:19 +02:00
Sönke Ludwig a5628230c1 Fix setupWorkerThreads to actually use the provided thread count. See #35. 2017-09-21 13:40:00 +02:00
Sönke Ludwig dd05676c4e Fix workerThreadCount to return the actual number of threads in the default worker pool. Fixes #35. 2017-09-21 13:39:05 +02:00
Sönke Ludwig 0dbebac482 Add TaskPool.threadCount property. 2017-09-21 13:38:24 +02:00
Sönke Ludwig 8895f62a49
Fix parameter name. 2017-09-15 15:58:35 +02:00
Sönke Ludwig 333643d48e Add interface_address parameter to UDPConnection.addMembership. 2017-09-15 15:54:59 +02:00
Sönke Ludwig 6cf2579206 Fix path construction from segment range with no internal separators. 2017-09-10 00:16:53 +02:00
Sönke Ludwig cf914d8827 Update version. 2017-09-05 16:05:06 +02:00
Sönke Ludwig 2d0576a5fe
Implement the UDP multicast support methods. 2017-09-03 18:15:52 +02:00
Sönke Ludwig 7e1d6a7323 Add listenUDP overload taking a NetworkAddress. 2017-09-03 15:54:17 +02:00
Sönke Ludwig 1ef8d5206f
Fix handling of the "periodic" argument to the setTimer compatibility overload. 2017-09-03 15:46:50 +02:00
Sönke Ludwig 43260cf982
Log the fiber/task ID in the HTML logger. 2017-09-03 14:17:57 +02:00
Boris-Barboris a590de154a fix deadlocks, caused by second m_locks increment 2017-08-28 21:58:08 +00:00
Sönke Ludwig 544157c065
Fix return value for FileDescriptorEvent.wait. 2017-08-14 14:27:09 +02:00
Sönke Ludwig 62ee67091d
Enable support for timeouts in FileDescriptorEvent.wait. 2017-08-13 23:35:11 +02:00
Sönke Ludwig 5e979364cb
Fix whitespace. 2017-08-10 11:08:26 +02:00
Sönke Ludwig 24f4e5f70f Resurrect GenericPath.startsWith.
Since the semantics are different w.r.t. path separators, the alternative suggested in the deprecation message is not valid. At least until the comparison/toString semantics of PathSegment have a profound definition, it will be kept around to avoid unneeded interruptions when upgrading to 0.8.x.
2017-08-10 10:09:01 +02:00
Sönke Ludwig 2777b0a6ff
Fix FileDescriptorEvent constructor to adhere to the given event mask. 2017-07-29 13:32:27 +02:00
Sönke Ludwig a60828d6da Mark more classes as final. 2017-07-23 15:04:11 +02:00
Sönke Ludwig 59ac459cdf Mark all synchronization classes final.
Those classes are not meant as being derived from.
2017-07-23 14:57:48 +02:00
Sönke Ludwig 2ba6c2eca1
Bump version number. 2017-07-20 18:50:40 +02:00
Sönke Ludwig f81c9175df
Mention that TCPListenOptions.distribute is deprecated. 2017-07-20 18:48:08 +02:00
Sönke Ludwig be0de0a733 Add assertions for uninitialized LocalManualEvents. 2017-07-20 16:52:35 +02:00
Sönke Ludwig a6eeae97f3 Fix DirectoryWatcher's creation of its LocalManualEvent. 2017-07-20 16:52:34 +02:00
Sönke Ludwig f6736d13ab Add test that reproduces the LocalManualEvent copy bug. 2017-07-20 16:14:47 +02:00
Sönke Ludwig 100dfc30ee Add test that triggers the former bug in ThreadLocalWaiter.emit() and ensures FIFO emit order. 2017-07-20 16:10:18 +02:00
Sönke Ludwig a4b36f08d3 Fix multiple issues in (Local)ManualEvent.
- Copying LocalManualEvent now works correctly, using reference counting
- ManualEvent correctly pins the reference to the thread-local waiter until it has finished emitting it
- ThreadLocalWaiter uses a doubly-linked list to manage task waiters (more efficient deletion, FIFO trigger order)
- Fixed a bug in ThreadLocalWaiter.emit() where the head element of the iterated list might already have stopped waiting, resulting in an invocation of a dangling TaskWaiter pointer
2017-07-20 15:57:44 +02:00
Sönke Ludwig 19db7732e6 Add nothrow annotations. 2017-07-20 13:36:27 +02:00
Sönke Ludwig 536fa09780 Add helper module with intrusive singly and doubly linked lists. 2017-07-20 13:34:39 +02:00
Sönke Ludwig cfb4f83113 Add makeGCSafe/disposeGCSafe as GC safe variants of make/dispose.
If necessary, these will call GC.addRange/GC.removeRange to avoid dangling GC references.
2017-07-20 13:34:12 +02:00
Sönke Ludwig 4bccf6fcb5
Use StackSList for ThreadLocalWaiter and add simple loop detection.
This will have to be adjusted to use a circular list with the possibility to insert a pivot element, so that consumption of waiters is safe in all cases (see the comment at 1265).
2017-07-19 14:54:33 +02:00
Sönke Ludwig d39bbf19c0
Avoid extra exception and allow toString of unspecified NetworkAddress values. 2017-07-19 14:50:20 +02:00
The Dlang Bot c62f07d257 Merge pull request #24 from vibe-d/error_handling
Use abort() in case of uncaught Error exceptions.
merged-on-behalf-of: Sönke Ludwig <s-ludwig@users.noreply.github.com>
2017-07-19 10:50:25 +02:00
Sönke Ludwig 7f050af455 Merge pull request #21 from wilzbach/trailing-whitespace
Remove all trailing whitespace + add check
2017-07-19 09:20:19 +02:00
Sönke Ludwig fb1518a7d6 remove more white space 2017-07-19 00:40:24 +02:00
Sönke Ludwig bfc6b89ca4
Use abort() in case of uncaught Error exceptions.
Fixes "dwarfeh(224) fatal error" that are suspected to be related to occasional infinite loops.
2017-07-19 00:11:12 +02:00
Sönke Ludwig 3d1175e821
Fix InterfaceProxy when used with class instances. 2017-07-19 00:10:39 +02:00
Sönke Ludwig fcf98c2016 Merge branch 'master' into trailing-whitespace 2017-07-19 00:08:33 +02:00
Sönke Ludwig d7b2173cb3 Implement TCPListener.stopListening and fix the vibe.core.net.1726 test.
The test fix follows the fix in the vibe.d repository: rejectedsoftware/vibe.d#f960427e5974c176c58b516647895a2af4ea181b
2017-07-18 11:55:39 +02:00
Sönke Ludwig e3492bab06 Update change log and bump version number. 2017-07-16 22:29:45 +02:00
Sönke Ludwig 4f69b1eaf3 Add setTaskCreationCallback() for better remote debugger integration. 2017-07-16 22:07:59 +02:00
Sönke Ludwig 719c62d6c9
Fix TLS initialization condition. 2017-07-16 00:08:07 +02:00
Sönke Ludwig 7efb496208
Fix double-free of ThreadLocalWaiter in ManualEvent.
Also adds assertions and a randomized multi-thread test to rule out similar issues with a higher confidence.
2017-07-15 18:16:13 +02:00
Sönke Ludwig 254d91dcdf
Improve error message. 2017-07-15 10:12:52 +02:00
Sönke Ludwig 87296bb1e4 Fix compilation error for VibeIdleCollect. 2017-07-10 19:46:16 +02:00
Sönke Ludwig ca2f9dbe91 Add UDP multicast declarations matching rejectedsoftware/vibe.d#1806.
The actual functionality still needs to be implemented in eventcore.
2017-07-08 10:44:42 +02:00
Sönke Ludwig 429d5dcb77 Fix GenericPath.parentPath. 2017-07-07 22:29:12 +02:00
Sebastian Wilzbach 8f89733a86 Remove all trailing whitespace
sed 's/[ \t]*$//' -i **/*.d
2017-07-03 12:19:27 +02:00
Sebastian Wilzbach 04b3575c14 Remove deprecated stdc import 2017-07-03 00:39:41 +02:00
Sönke Ludwig 58ee4a8839
Use a thread local allocator instead of processAllocator in HashMap.
This is required since processAllocator returns an ISharedAlloactor since 2.075.0. Because HashMap is operating only thread-local, this should generally be safe.
2017-06-28 17:22:13 +02:00
Sönke Ludwig 01ed0a43de Adjust for eventcore 0.8.12. 2017-06-27 01:11:50 +02:00
Sönke Ludwig f123e55fa9 Fix assertion condition. 2017-06-22 16:22:11 +02:00
Sönke Ludwig ed9efd9f44 Merge pull request #10 from wilzbach/allow-removal-of-the-default-logger
Allow removal of the default logger
2017-06-22 10:25:20 +02:00
Sönke Ludwig fd93ab82f5
Remove deprecation attribute for the system overload of setTimer.
The approach for now is to keep overloads that receive system delegates and are also marked system in turn. This breaks safety promises in some places within the library, but is an acceptable first step that keeps other possible directions open.
2017-06-22 09:38:56 +02:00
Sönke Ludwig f40da06385
Update version number. 2017-06-22 09:36:49 +02:00
Sönke Ludwig 07e077a009
Redesign the Path type to statically encode the path format.
The previous design, while intended as an improvement over the one-size-fits all Path struct of vibe-d:core, turned out to produce lots of bugs during the transition, because of missing Path.type checks.

The new design uses a cleaner approach, where the static type of a path value encodes the path format. An explicit cast is necessary to convert between different path types. The internet path type also performs proper validation and percent encoding, so that InetPath.toString() always produces a valid URI path.
2017-06-21 14:04:24 +02:00
Sönke Ludwig 7d7e4709c1
Fix nothrow overloads of lock(). 2017-06-15 13:45:14 +02:00
Sönke Ludwig 0d164708ec Fix Windows->inet/Posix path conversion issue. 2017-06-15 10:04:55 +02:00
Sönke Ludwig 5c156d1e90 Clarify async() semantics. 2017-06-12 17:34:09 +02:00
Sönke Ludwig 62e3add3ab Fix a number of issues related to mixing different path types. 2017-06-12 17:33:25 +02:00
Sönke Ludwig 6f7c897f91 Fix getFileInfo name return value for paths that end with a slash. 2017-06-12 17:31:52 +02:00
Sönke Ludwig bc689489a8
Add yieldLock(), which enables enforcing no task switches within a scope.
runTask() was altered to delay the task switch in case it gets called within an active yieldLock(), so that running tasks is still possible.
2017-06-11 11:40:25 +02:00
Sönke Ludwig 698824e811
Partially implement FileDescriptorStream.
Currently only works for waiting on read-readiness (eventcore is not exposing an analog function for write-readiness).
2017-05-30 11:02:22 +02:00
Sönke Ludwig 99a5b882d8
Limit the number of recycled fibers.
This allows the process to free up memory after heavy load spikes, while not impacting performance negatively.
2017-05-30 11:00:37 +02:00
Sönke Ludwig 0aed5664ef
Let openFile throw on failure instead of returning an invalid stream. 2017-05-30 10:57:31 +02:00
Dentcho Bankov aef2936abd Fix for #11. Cross port of fix for #1742 from vibe.d 2017-04-15 00:04:08 +03:00
Sönke Ludwig e3c680b0ce
Add assertion to ManualEvent to check for failure of creating event handles. 2017-03-27 16:32:24 +02:00
Sönke Ludwig 0895cd1960
Avoid bogus assertion failure.
Since the task queue entries never got cleaned up, the assertion got triggered once already used queue slots were starting to get reused.
2017-03-27 16:31:52 +02:00
Sönke Ludwig e81589fa3e
(Re)implement JSON configuration support for readOption.
Since the core->data dependency was removed, this had to be commented out. It is now implemented in terms of std.json.
2017-03-25 14:16:22 +01:00
Sönke Ludwig e769a9b1ca Avoid lazy evaluation of log arguments while the loggers are locked. Fixes rejectedsoftware/vibe.d#1717.
The deadlock happened because a function that waits for a worker task to finish was passed to the log functions. Evaluated lazily, it got called while the logger's mutex was locked, meaning that any log call from within that thread would cause a deadlock.

This change also has another, possibly important, implication - arguments are evaluated only once instead of possibly multiple times if multiple loggers are registered. This could very well make a lot of existing (wrong) code more robust (e.g. logInfo("%s", i++)).
2017-03-23 17:55:51 +01:00
Sebastian Wilzbach c80a15321e Allow removal of the default logger 2017-03-22 13:45:32 +01:00
Sönke Ludwig e3f9d07e58
Don't store local/remote address for UDP connections.
Errored out due to the space requirements of UNIX addresses.
2017-03-10 23:00:43 +01:00
Sönke Ludwig 5fd9fc4007
Always compute TCPConnection.xxxAddress on demand.
Storing the network addresses becomes too expensive with UNIX socket support.
2017-03-10 21:06:18 +01:00
Sönke Ludwig ed8b33786b
Compile fixes. 2017-03-10 20:07:04 +01:00