Commit graph

490 commits

Author SHA1 Message Date
Sönke Ludwig 9f73049196 Use path format specific separator for root prefix segment.
Fixes format invariant checks for formats that do not use "/" as a path separator.
2021-01-19 10:34:43 +01:00
Sönke Ludwig 246b5262c6 Avoid among switch-case jump table overhead for just two possible values. 2021-01-19 10:34:43 +01:00
Sönke Ludwig dc0fe5ad73 Apply the same optimization to InetPathFormat.encodeSegment. 2021-01-19 10:30:28 +01:00
Sönke Ludwig 4bb5fc9ce8 Optmize InetPathFormat.validatePath.
Speeds up the check by roughly 4x.
2021-01-19 10:30:28 +01:00
Sönke Ludwig 69444da9a3 Work around missing AT_SYMLINK_NOFOLLOW declaration for Musl. 2021-01-18 14:30:33 +01:00
Sönke Ludwig 59912a7f21 Fix compilation of the directory iteration code on additional POSIX based platforms. 2021-01-18 14:30:33 +01:00
Sönke Ludwig bb6e36429c Bump version to 1.13.0. 2021-01-15 21:35:13 +01:00
Sönke Ludwig d141ce256d
Merge pull request #246 from vibe-d/path_extension
Add extension and stripExtension functions
2021-01-15 18:57:21 +01:00
Sönke Ludwig 762ababa4d Add Segment2.extension and .withoutExtension properties.
Also adds GenericPath.fileExtension as a shortcut for `path.head2.extension`.
2021-01-15 18:25:20 +01:00
Sönke Ludwig 14bbc4bdec Add GenericPath.normalized property. 2021-01-15 18:25:19 +01:00
Sönke Ludwig d4ec266f76 Implement parallelMap and parallelUnorderedMap. 2021-01-15 00:54:49 +01:00
Sönke Ludwig 353948d426 Add workerTaskPool property to access the default task pool. 2021-01-14 22:21:50 +01:00
Sönke Ludwig 2be696fe01 Add static assertion error message. 2021-01-14 10:43:36 +01:00
Sönke Ludwig 7bc5606ac7 Bump version to 1.12.0.
Since this adds features, a new minor version is required.
2021-01-12 21:16:43 +01:00
Sönke Ludwig 20daa73385 Bump version to 1.11.4. 2021-01-12 20:56:31 +01:00
Sönke Ludwig 5e6231c738 Fix zero byte index computation. 2021-01-12 17:38:32 +01:00
Sönke Ludwig ca1fe41421 Add DirectoryListMode.shallowDirectories.
Shallow iteration, returning only directories. DirectoryListMode is now defined using bit combinations for "recursive" and "directories-only".
2021-01-12 17:37:02 +01:00
Sönke Ludwig d1273ca08b Fix the declaration of fstatat on macOS.
Was referencing the classic declaration that doesn't fit the current stat struct, leading to wrong stat results.
2021-01-12 17:37:02 +01:00
Sönke Ludwig df03416eea Reduce visibility of minor debug log message. 2021-01-12 17:37:01 +01:00
Sönke Ludwig 3e45456bf3 Allow the buffer to grow for PipeMode.concurrent.
Reduces overhead for fast streams by increasing the buffer size up to 4MB, as long as the latency stays below 100ms.
2021-01-12 14:40:36 +01:00
Sönke Ludwig 1f0ac47b9d Rework the listDirectory implementation.
- Directly uses OS facilities instead of Phobos to avoid string processing overhead and to enable fast skipping of non-directories
- Introduces a DirectoryListMode, similar to SpanMode
- Uses low-overhead channels to reduce the communication overhead between the calling thread and the worker thread that calls the OS
- Adds FileInfo.path to properly support the new recursive directory iteration schemes
2021-01-12 10:55:29 +01:00
Sönke Ludwig b6ed92e8b5 Introduce ChannelConfig/ChannelPriority.
Adds a low-overhead mode to Channel!T that causes the buffer to be fully processed before notifying waiting peers instead of notifying immediately once data/space is available. This heavily reduces the overhead of cross-task/thread notifications at the expense of introducing processing latency and requiring a call to close() to guarantee that all data has been processed.
2021-01-12 10:55:12 +01:00
Sönke Ludwig 9980eae7a5 Fix intermittent unit test crash at shutdown.
Sometimes crashed on macos when the logger instance was reaped at runtime shutdown time.
2021-01-12 10:55:12 +01:00
Sönke Ludwig 3fbc8bb397 Fix deprecation warning. 2021-01-12 10:55:12 +01:00
Sönke Ludwig 05bc56dbba Bump version to 1.11.3. 2020-12-18 16:21:54 +01:00
Sönke Ludwig f8a6044dba Avoid modern contract syntax. 2020-12-18 14:11:29 +01:00
Sönke Ludwig ade765d6bd Fix a worker task scheduling issue for busy worker tasks.
Fixes new tasks being able to be scheduled on a worker thread while a busy task (that periodically calls yield()) is running.
2020-12-15 19:43:20 +01:00
Sönke Ludwig 0bd78a1a95 Bump version to 1.11.2. 2020-12-12 10:56:46 +01:00
Sönke Ludwig 34703d412d Make ScopedMutexLock nothrow.
Wrong order of lock/unlock calls are programming errors and should be treated as such.
2020-12-12 10:11:17 +01:00
Sönke Ludwig ba6c058148 Add some more VibeTaskLog logging. 2020-12-10 09:22:38 +01:00
Sönke Ludwig a9ba6d98cb Fix bogus file access denied error after listDirectory calls on Windows.
Makes sure that `FindClose` gets called before `listDirectory` returns to avoid a race-condition, where a successive modification of the directory fails with "access denied".
2020-12-01 19:23:05 +01:00
Sönke Ludwig 3d1be3b3cb Improve debug trace logging. 2020-11-25 23:24:27 +01:00
Sönke Ludwig 958856f6f1 Bump version to 1.11.1 2020-11-25 00:30:34 +01:00
Sönke Ludwig 3182160a9a Avoid bogus "A task cannot interrupt itself" assertion failure.
Calling Task.interrupt() on a task that is already finished, but ran on the same fiber would trigger an assertion failure instead of returning silently.
2020-11-19 16:06:49 +01:00
Sönke Ludwig b160f80af6 Avoid instantiating emplace(O) for class instances.
Fixes a deprecation warning for ProxyStream.
2020-11-14 09:42:05 +01:00
Sönke Ludwig 131f7f5e54 Bump version to 1.11.0 2020-10-24 11:51:09 +02:00
Sönke Ludwig 2ea3a7ceb1 Refactor read loop to avoid code duplication. 2020-10-21 20:05:00 +02:00
Sönke Ludwig eb183d5ab2 Use concurrent pipe() in copyFile(). 2020-10-21 17:37:36 +02:00
Sönke Ludwig f3f60ee870 Implement a concurrent mode for pipe().
This maximizes throughput for typical disk I/O loads.
2020-10-21 17:37:33 +02:00
Sönke Ludwig a736481467 Update change log and bump version to 1.10.3. 2020-10-15 14:13:16 +02:00
Sönke Ludwig ae6506289a Fix waitForDataEx's return value for an open connection and a zero timeout.
IOMode.once causes the read() to return with IOStatus.wouldBlock immediately, which previously resulted in erroneously reporting WaitForDataStatus.noModeData instead of timeout.

See vibe-d/vibe.d#2483
2020-10-15 13:13:15 +02:00
Sönke Ludwig be0e3e033b Bump version to 1.10.2. 2020-09-19 00:07:58 +02:00
Leonid Kramer 483725f5eb
Merge pull request #228 from vibe-d/interfaceproxy_null
Fix InterfaceProxy to work with null values.
2020-09-18 23:04:02 +02:00
Sönke Ludwig 3b82d4adca Fix InterfaceProxy to work with null values.
Previously caused crashes and opCast!bool to return true for null instances.
2020-09-18 10:10:26 +02:00
Sönke Ludwig f5c6099656 Work around critical issue in eventcore's cancelRead/cancelWrite.
The file I/O versions of cancelRead and cancelWrite in eventcore currently do not reliably cancel the operation in a synchronous fashion, leading to continued buffer accesses after the cancellation call. In case of the Windows version, this also means that the OVERLAPPED structure can be illegally reused for the next operation, while the previous one hasn't been canceled, yet.

A solution to this issue may require a fundamental change in the file I/O API of eventcore, and the optimal design of that still needs to be worked out. For this reason, we simply avoid using the cancellation functions in vibe-core for now to avoid memory corruption issues. This does mean that interrupting a task that does file I/O won't work anymore.
2020-09-18 10:09:16 +02:00
Geod24 bc7521ed1f Add release notes for v1.10.1 2020-08-31 18:18:52 +02:00
Geod24 9a685523f9 Add support for DMD 2.094 -preview=in switch
This will allow users to use -preview=in as soon as it's released.
2020-08-31 06:59:50 +02:00
Geod24 258342163f Bump version and add changelog for v1.10.0 2020-08-24 05:17:59 +02:00
Geod24 bd8c2c6e90 Use logException consistently and use logDiagnostic
Many places around were re-inventing logException with varying level of success.
In addition, the full error is now printed as a diagnostic instead of debug.
This is more in line with the description of `LogLevel.diagnostic`
("Extended user information (e.g. for more detailed error information)"),
as opposed to the one of `LogLevel.debug_`
("Developer information useful for algorithm debugging").
2020-08-24 05:17:59 +02:00
Geod24 f3accb40d5 Replace compile-time logging arguments file / line with runtime one
Since DMD v2.079.0 it is possible to put default, always-used default parameters
after variadic arguments (as long as IFTI is used).
This way we can move all the compile-time arguments, which would always trigger
a template instantiation, to runtime arguments, and re-enable module and function.
2020-08-24 05:17:59 +02:00