Commit graph

476 commits

Author SHA1 Message Date
Sönke Ludwig f8c25adf02 Ensure that HashMap with POD types is nothrow. 2020-04-16 09:53:13 +02:00
Sönke Ludwig cc66180ad8 Ensure path relativeTo() is nothrow. 2020-04-16 09:52:58 +02:00
Sönke Ludwig 899a84d834 Fix SyslogLogger. Fixes #203.
This was not working at all since the release of vibe-core due to dependencies on other parts of vibe.d. The unit test has now been moved out of the template class, so that it is actually run.
2020-04-10 18:13:35 +02:00
Sönke Ludwig b6bedd63c0 Update version to 1.9.0. 2020-03-18 15:32:52 +01:00
Sönke Ludwig cef4885a63 Update change log. 2020-03-18 15:32:26 +01:00
Sönke Ludwig 73367273b5 Fix behavior of TCPConnection.write when the connection gets closed half-way trough.
Should throw an exception in case of IOMode.all, but actually returned a partial result.
2020-03-18 12:36:08 +01:00
Sönke Ludwig 44f13592d3 Remove dead code. 2020-03-16 14:14:50 +01:00
Sönke Ludwig d2b777607a Use normal task priority when handling events.
Defining VibeHighEventPriority to revers to the old event scheduling priority.
2020-03-15 10:54:55 +01:00
Sönke Ludwig 1eebe7a9ce Add TaskSwitchPriority to control the priority to use when transferring execution. 2020-03-15 10:54:35 +01:00
Sönke Ludwig d07c2f02e6 Fix TaskQueue.insertBackPred. 2020-03-15 10:54:32 +01:00
Sönke Ludwig 280023dfc2 Avoid potential overflow for dynamic task priority. 2020-03-15 08:59:17 +01:00
The Dlang Bot 1f86470e4c
Merge pull request #196 from vibe-d/task_priorities
Implement priority based task scheduling.
merged-on-behalf-of: Leonid Kramer <l-kramer@users.noreply.github.com>
2020-03-15 08:00:42 +01:00
Sönke Ludwig 262b417794 Add TaskSettings overloads for runWorkerTaskDist(H). 2020-03-14 23:33:41 +01:00
Sönke Ludwig 6a2dfa468b Implement priority based task scheduling.
1. Removes the marker task used by schedule() and instead limits the number of task resumptions to the initial length of the task queue
2. Assigns a static and a dynamic priority to each task. The dynamic priority starts with the same value as the static priority and gets incremented by the static priority each time the task gets overtaken by a higher priority task, eventually leading to the task becoming the highest priority (unless the static priority is zero). Tasks with a higher dynamic priority generally take precedence, unless the concurrency exceeds 10 scheduled tasks, in which case the front of the queue is scheduled in normal FIFO order.
2020-03-14 20:37:33 +01:00
Sönke Ludwig 0122e665db Fix contract for Timer.rearm. 2020-03-14 19:47:29 +01:00
Sönke Ludwig 5010085340 Fix documentation of pipe(). 2020-03-14 19:47:29 +01:00
Sönke Ludwig 6041347405 Fix deprecation warning. 2020-03-14 19:47:29 +01:00
Sönke Ludwig 8e24c4a204 Correct copyright holder.
rejectedsoftware e.K. doesn't exist anymore since mid-2019.
2020-01-27 19:20:52 +01:00
Sönke Ludwig 699f43c80c Update change log and bump version to 1.8.1. 2019-12-17 10:37:28 +01:00
Sönke Ludwig 8792e315a4
Merge pull request #186 from gedaiu/patch-1
Add a way to enforce that the GC is not running
2019-12-17 10:34:45 +01:00
Geod24 9615ed1d5a Fix documentation warning on parameter 2019-12-17 17:12:56 +09:00
Szabo Bogdan 7f5be316a1
Add a way to enforce that the GC is not running 2019-12-12 10:06:19 +01:00
Sönke Ludwig 4139cf746b Bump version to 1.8.0. 2019-12-07 16:04:35 +01:00
Sönke Ludwig eeabae4794 Bump version to 1.8.0-alpha.2 2019-10-25 22:58:51 +02:00
Leonid Kramer 930660fc05
Merge pull request #181 from vibe-d/path_improvements
Path improvements
2019-10-25 21:08:08 +02:00
Sönke Ludwig f56fd7580c Avoid reallocating the data in readFileUTF8 if the UTF encoding is valid.
Uses the immutable overload of sanitizeUTF8 to reuse the original buffer if possible.
2019-10-22 11:41:35 +02:00
Sönke Ludwig 2e4bc6a316 Improve performance of sanitizeUTF8/readFileUTF8.
Uses std.encoding.sanitize, which returns the original string, if all code points are properly encoded. Note that the performance could still be improved considerably by iterating over multiple bytes at once, fast skipping over characters that don't have the most significant bit set.
2019-10-22 11:40:23 +02:00
Sönke Ludwig 07c7bb88a9 Make the range returned by bySegment2 a Voldemort type.
Declaring it as a public symbol just introduces API maintenance burden without a real benefit.
2019-10-22 11:30:54 +02:00
Sönke Ludwig 6985e8dcb4 Add GenericPath.byPrefix.
Allows successively iterating over ancestor paths in O(n) complexity and with no dynamic memory allocations.
2019-10-22 11:30:53 +02:00
Sönke Ludwig 81ba969fd6 Reduce log noise for worker tasks. 2019-10-22 11:30:31 +02:00
Sönke Ludwig 2bf660a529 Bump version to 1.8.0-alpha.1. 2019-09-27 17:37:43 +02:00
Sönke Ludwig aae2c28ef6 Make sure that an uninitialized YieldLock does not decrement the lock counter.
Uninitialized YieldLock values can happen in various ways, dispite the default constructor being disabled. If any such value got destroyed, it would lead to a negative lock count. Since this is handled properly now, the default constructor is also enabled in this commit.
2019-09-27 15:09:06 +02:00
Leonid Kramer 24a83434e4
Merge pull request #179 from vibe-d/path_optimization
Add a nogc path segment API
2019-09-26 11:54:36 +02:00
Sönke Ludwig 645896bcfd Use bySegment2 instead of bySegment for high-level functionality. 2019-09-19 15:33:00 +02:00
Sönke Ludwig 6ef53121ad Add GenericPath.bySegment2 and .head2 as fully nogc alternatives. 2019-09-19 15:32:59 +02:00
Sönke Ludwig 32858b7aee Rework the path segment encoding/decoding API.
- Deprecates Format.decodeSegment (returning a range of GemericPath.Segment) and added decodeSingleSegment instead, which returns a string instead.
- Adds Format.encodeSegment to encode a single path segment
2019-09-19 15:32:59 +02:00
Sönke Ludwig 5640516ba8 Remove SpinLock and use core.sync.mutex.Mutex instead.
The places that used it showed too much contention in load tests, so that the spin lock was more expensive that the regular OS mutex/futex.
2019-09-19 11:25:14 +02:00
Sönke Ludwig 04be22b00e Bump version number. 2019-09-17 19:37:13 +02:00
Sönke Ludwig db994eaa80
Fix compile error on old compiler versions 2019-09-17 15:22:41 +02:00
Geod24 e7294bb9bd Clean up std.json deprecation 2019-09-03 01:35:58 +09:00
JinShil bb25789132 Replace sizediff_t with ptrdiff_t 2019-08-31 12:30:50 +09:00
JinShil eb4344653e Replace hash_t with size_t 2019-08-31 12:29:15 +09:00
Sönke Ludwig 3dff74fc0f Bump version number. 2019-08-25 17:12:49 +02:00
Sönke Ludwig d9e545bf60 Fix getFileInfo's exception handling and reduce overhead of the background work.
Instead of asyncWork, now uses a worker task directly and signals the finalization of the result using message passing. This avoids the roundtrip required to return the task handle, as well as the heap allocated result buffer of Future!T.
2019-08-25 12:02:08 +02:00
Sönke Ludwig d7dfb6cd23 Bump version number. 2019-08-24 16:36:48 +02:00
Sönke Ludwig ce1adf8c3b
Merge pull request #172 from vibe-d/async_file_operations
Avoid all blocking file operations outside of worker threads
2019-08-21 20:59:45 +02:00
Sönke Ludwig a2f970b7b2
Merge pull request #165 from vibe-d/pure_parent_path
Make GenericPath.parentPath pure.
2019-08-21 19:26:00 +02:00
Sönke Ludwig 84907ddbe3
Merge pull request #168 from v1ne/fix-appending-to-file
FileStream: Adjust file offset when appending to a file
2019-08-21 19:25:17 +02:00
Sönke Ludwig f6b97b04c3 Make GenericPath.parentPath pure. 2019-08-21 13:57:54 +02:00
Sönke Ludwig e3a38b374e Let all non-aio file system functions run in worker threads.
This avoids stalling the event loop in case of lengthy I/O (network shares, spinning up hard drives etc).
2019-08-21 13:34:00 +02:00
Sönke Ludwig 881e3da5f9 Make async marked safe if possible and add asyncWork.
asyncWork is the same as async, except that it guarantees that the computation happens in a worker thread.
2019-08-21 13:34:00 +02:00
Sönke Ludwig 4f5636dadf Mark async/Future and runWorkerTaskH as safe. 2019-08-21 13:34:00 +02:00
Tomáš Chaloupka 4e8302d10d unlock ConnectionPool on failure 2019-07-31 14:41:26 +02:00
v1ne 513bebcb95 FileStream: Approximate the file offset better when appending
Instead of starting at zero, start at the current file size. This offset
is stored in FileStream. It is only an approximation because concurrent
writes could advance the file without FileStream's knowledge.

Add a test that shows that the offset is approximated as expected and that
appending to an existing file works, too.

This is also a regression test which shows that appending to an existing
file works as expected. See vibe-d/eventcore#115.
2019-07-26 00:38:15 +02:00
v1ne ce9faec1c1 FileStream: Forbid seek(.) or truncate(.) when appending to a file
Those functions do not work for files opened for appending. Make this clear.
2019-07-26 00:29:59 +02:00
v1ne 3ebb065509 Clean up: Use "enforce" 2019-07-26 00:29:59 +02:00
Sönke Ludwig e5f45718f6 Bump version number. 2019-06-21 21:44:27 +02:00
Sönke Ludwig 04d01b0f31 Handle terminated eventcore drivers gracefully when releasing handles.
Instead of crashing, this now prints a warning message. See #135.
2019-06-20 11:56:22 +02:00
Leonid Kramer c39fdb2208
Merge pull request #163 from vibe-d/issue157-empty-consumeOne-on-closed-channel
Fix empty-consumeOne channel usage pattern for a single consumer
2019-06-20 09:31:13 +02:00
Sönke Ludwig 37ad77c701 Let empty block to make sure the following consumeOne succeeds.
This change ensures that a return value of false guarantees the next call to consumeOne to succeed, meaning that the combination of empty/consumeOne is sound in a single-consumer scenario. This also updates the documentation to stress that tryConsumeOne is still the preferred API.
2019-06-16 23:00:05 +02:00
Sönke Ludwig 8c63f79ea7 Avoid yielding in the task finalization phase. Fixes #161.
Makes sure that the task finalization finishes (including notifying possibly multiple joiners) before the fiber yields, because it won't be resumed by the scheduler before the next task gets assigned to the fiber.
2019-06-16 22:44:11 +02:00
Sönke Ludwig 79bb21c6a3 Bump version number. 2019-06-16 15:10:50 +02:00
Sönke Ludwig 989577ff23 Fix copyFile setting file times of write protected files. 2019-06-16 15:10:50 +02:00
Sönke Ludwig 0d78dfe4a9 Let TCPConnection.leastSize time out according to the readTimeout property.
Fixes #153.
2019-06-16 09:55:00 +02:00
Sönke Ludwig 5393109669 Add TCPConnection.waitForDataEx.
Allows to distinguish between timeout and no more data cases.
2019-06-04 15:20:54 +02:00
Sönke Ludwig 33014fde5f
Merge pull request #154 from BenjaminSchaaf/process
Implement vibe.core.process for subprocess handling similar to std.process
2019-06-04 11:18:34 +02:00
Benjamin Schaaf 68dd4baa44 s/registerProcess/adoptProcessID/g 2019-06-04 10:13:00 +10:00
Benjamin Schaaf 0d4840b81d Address review comments 2019-06-02 14:42:41 +10:00
Geod24 40f82b22e5 Remove useless imports to std.variant 2019-05-28 14:24:42 +09:00
Sönke Ludwig 08db20629b Implement logException.
Logs an exception along with an error message and the full stack trace. Performs proper exception handling for the latter to stay nothrow.
2019-05-25 22:12:43 +02:00
Sönke Ludwig c3832cbb8b Bump version number. 2019-05-19 11:51:16 +02:00
Benjamin Schaaf 83e2d391e6 2nd candidate windows compilation fix 2019-05-05 17:52:44 +10:00
Benjamin Schaaf 7f11fcf7a6 Candidate windows compilation fix 2019-05-05 15:37:35 +10:00
Benjamin Schaaf c3f5ebb9fd Implement vibe.core.process for subprocess handling similar to std.process 2019-05-05 15:27:57 +10:00
Sönke Ludwig b86610011f
Merge pull request #150 from rracariu/patch-1
Add way to disable port and address reuse
2019-04-26 09:56:04 +02:00
Denis Feklushkin fc9bef86af Logger: avoid formatting for strings without additional args 2019-04-23 23:01:44 +07:00
Radu Racariu 5e8e75e3e8 Add way to disable port and address reuse 2019-04-17 16:40:04 +03:00
Sönke Ludwig f734b4a142 Improve thread-correctness of Task/TaskFiber.
- Task.join and Task.interrupt are now thread-safe
- TaskFiber.task returns Task.init if no task is running (avoids bogus resumes of the TaskFiber by the scheduler)

To enable thread-safe join/interrupt, the task counter is now stored together with the necessary flags within a single shared ulong that is manipulated atomically.
2019-04-13 20:53:01 +02:00
Sönke Ludwig a202d33b3e Fix a (harmless) race-condition.
ThreadLocalWaiter.unused may only be accessed from the owner thread.
2019-04-13 17:01:50 +02:00
Sönke Ludwig 1ca950867a Fix typo. 2019-04-05 09:47:37 +02:00
Sönke Ludwig a86f25b3b4 Fix range violation in makeFileInfo and add some unit tests. 2019-04-05 09:47:32 +02:00
Sönke Ludwig bf30127534 Add ConnectionPool.removeUnused.
Allows to disconnect all connections that are not currently in use. In particular, it allows to close all connections at shutdown to avoid leaking socket descriptors.
2019-03-28 14:11:20 +01:00
Sönke Ludwig e03caac035 Bump version number. 2019-03-26 15:37:30 +01:00
Sönke Ludwig 8e4adf000f Make the DirEntry->FileInfo conversion nothrow.
Avoids listDirectory/iterateDirectory getting interrupted when stumbling over inaccessible files. The `name` field of the returned file info value is always set, so that these files can still be identified.
2019-03-25 09:45:47 +01:00
The Dlang Bot 5b146ab002
Merge pull request #141 from FraMecca/master
support isFile
merged-on-behalf-of: Sönke Ludwig <s-ludwig@users.noreply.github.com>
2019-03-21 20:22:21 +01:00
Francesco Mecca 6292320bb2 support isFile 2019-03-21 17:39:44 +01:00
Sönke Ludwig caf291dd22 Bump version number. 2019-03-10 16:00:30 +01:00
Sönke Ludwig 02f5b4f91d Avoid superfluous notifyAll calls in Channel.
Slightly reduces the notification overhead in multiple-reader or multiple-writer scenarios.
2019-03-10 16:00:12 +01:00
Leonid Kramer f558ce6c3f
Merge pull request #139 from vibe-d/busy_loop_interleave
Fix proper interleaving of busy yield loops inside and outside of tasks.
2019-03-09 21:41:47 +01:00
Sönke Ludwig cae9f28885 Fix proper interleaving of busy yield loops inside and outside of tasks. 2019-03-06 12:35:37 +01:00
Steven Dwy 111478ef41 Fix #109 - TCPConnectionFunction is actually a delegate 2019-02-24 02:55:47 -08:00
Joseph Rushton Wakeling d8e4013c92
Fix runApplication handling of unrecognized command-line args
`runApplication` takes an `args_out` parameter which, if non-null, is
supposed to be set to match unrecognized command-line args.  However,
the parameter is never passed to `finalizeCommandLineOptions`, which
will therefore log an error and throw an exception if any command line
arguments are unrecognized.

This patch fixes the oversight, ensuring that `runApplication` will
correctly populate a non-null `args_out` parameter with unrecognized
command-line arguments, and not throw an exception in this case.
2019-02-22 16:33:01 +01:00
Sönke Ludwig bfcf08def0 Bump version number. 2019-01-26 19:28:43 +01:00
Sönke Ludwig 92bb067f4b Make Channel.tryConsumeOne/consumeAll/close/empty/bufferFill nothrow. 2019-01-26 18:29:28 +01:00
Sönke Ludwig 1a463cafc9 Make TaskCondition.wait/notify/notifyAll nothrow. 2019-01-26 18:04:50 +01:00
Sönke Ludwig c6a29e1c3b Make createChannel safe and add Channel.bufferFill. 2019-01-26 18:04:50 +01:00
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