Age | Commit message (Collapse) | Author | Files | Lines | |
---|---|---|---|---|---|
2022-08-12 | Run TSan and MSan on CI | David Robillard | 1 | -3/+6 | |
2022-08-12 | Fix ring thread safety | David Robillard | 1 | -25/+53 | |
The previous code was "probably fine" in practice, but was both missing some necessary synchronization, and using unnecessarily heavyweight barriers on Windows. Since this code conveniently has a 1:1 relationship between barriers and atomic accesses anyway, rewrite things to use an "atomic" interface closer to standard C11 and C++11. Harden things in the process, so that the thread-safety guarantees are followed, and hopefully clearer to see in the code (1 synchronized read of "their" index, then maybe 1 synchronized write of "your" index). Windows/MSVC annoyingly does not provide a suitable C API for this, so just ignore the existence of Windows on ARM and use x86/x64 Windows intrinsics to prevent compiler reordering (which is all that's required on those architectures). Note that MSVC can make some reordering guarantees about volatile variables, but: * Only with a certain option, /volatile:ms, which Microsoft "strongly recommend" against using. It is disabled by default (and painfully slow if enabled) on ARM. * This guarantee does not prevent reordering of access to other memory (only the volatile variables themselves), which is required by a ring buffer. So, deal with that case by using explicit read and write barriers like before, but only in the atomic abstractions. In the process, switch to more lightweight barriers, which should marginally improve performance on Windows. When MSVC adds stdatomic.h support, most of the platform-specific gunk here can go away entirely. | |||||
2022-08-12 | Simplify ring writing code | David Robillard | 1 | -6/+8 | |
The compiler is surely smart enough to factor out these common expressions, but I find this easier to read this way anyway. | |||||
2022-08-12 | Use a consistent error handling style | David Robillard | 1 | -6/+5 | |
2022-08-12 | Simplify ring space calculations | David Robillard | 1 | -14/+2 | |
It isn't necessary to branch here to avoid underflow. Essentially, the way that unsigned binary integers work "automatically" does what this code was doing. Note that these expressions only work for a ring buffer that, like this one, has a power of 2 (real) size and a maximum capacity 1 less than that. | |||||
2022-08-12 | Document the thread semantics of every ring function | David Robillard | 1 | -15/+42 | |
2022-08-12 | Use sensible meson setup commands in CI configuration | David Robillard | 1 | -18/+18 | |
2022-07-18 | Use consistent pkg-config description | David Robillard | 1 | -1/+1 | |
2022-07-15 | Pass suppression flags explicitly | David Robillard | 1 | -5/+4 | |
2022-07-15 | Fix shared library build | David Robillard | 1 | -0/+1 | |
2022-07-14 | Simplify linking against static libraries | David Robillard | 1 | -3/+5 | |
2022-07-14 | Clean up meson definitions | David Robillard | 1 | -29/+45 | |
2022-07-13 | Simplify installation instructions | David Robillard | 2 | -25/+2 | |
2022-07-13 | Suppress new warnings in clang and clang-tidy 14 | David Robillard | 4 | -0/+6 | |
2022-07-13 | Remove unnecessary clant configuration | David Robillard | 2 | -5/+1 | |
2022-06-28 | Fix strict release builds | David Robillard | 1 | -1/+1 | |
2022-06-28 | Format plot.py with black | David Robillard | 1 | -42/+59 | |
2022-06-28 | Simplify clang-tidy configuration | David Robillard | 3 | -18/+0 | |
2022-06-28 | Move zix_strerror to library | David Robillard | 3 | -23/+35 | |
2022-06-28 | Use uppercase integer literal suffixes | David Robillard | 21 | -208/+201 | |
I give in. | |||||
2022-06-28 | Fix whitespace | David Robillard | 4 | -11/+11 | |
2022-06-28 | Simplify dep5 file by adding license headers where possible | David Robillard | 9 | -5/+25 | |
2022-06-28 | Update README | David Robillard | 2 | -20/+118 | |
2022-06-28 | Fix build as C with MSVC | David Robillard | 4 | -6/+4 | |
2022-06-28 | Clean up build configuration | David Robillard | 12 | -44/+94 | |
2022-06-28 | Add support for building Wasm with emscripten | David Robillard | 3 | -4/+56 | |
2022-06-28 | Fix incorrect function attributes | David Robillard | 2 | -4/+4 | |
The ring accessors are pure, not const, because they read pointed-to data (the ring) that may change between invocations. The BTree iter comparison is const because it only compares the values passed as parameters (although they contain pointers, they aren't dereferenced). | |||||
2022-06-28 | Clean up meson configuration | David Robillard | 5 | -234/+384 | |
2022-06-28 | Remove redundant includes | David Robillard | 2 | -2/+0 | |
This is implicitly included by <inttypes.h>. | |||||
2022-03-14 | Reduce default BTree test time | David Robillard | 1 | -1/+1 | |
2022-03-14 | Fix MinGW build | David Robillard | 1 | -0/+2 | |
2022-02-02 | Avoid fallthrough annotation on older GCC versions | David Robillard | 1 | -1/+1 | |
2022-02-01 | Fix static build on Windows | David Robillard | 1 | -2/+4 | |
2022-01-14 | Fix hash insertion tombstone replacement case | David Robillard | 1 | -0/+1 | |
2021-12-17 | Suppress warning in glib headers | David Robillard | 1 | -1/+2 | |
This should really be done more precisely, but I can't be bothered. | |||||
2021-12-17 | Reduce benchmark code complexity | David Robillard | 1 | -38/+50 | |
2021-12-17 | Suppress new warnings in clang-tidy 13 | David Robillard | 6 | -7/+10 | |
2021-12-17 | Suppress new warnings in clang 13 | David Robillard | 1 | -0/+10 | |
2021-12-17 | Fix memory leaks in dictionary benchmark | David Robillard | 1 | -0/+9 | |
2021-11-02 | Avoid printing configuration summary as a subproject | David Robillard | 1 | -1/+1 | |
2021-10-27 | Gracefully handle realloc failure in benchmark | David Robillard | 1 | -2/+16 | |
Not really a relevant case here, but it resolves issues found by cppcheck. | |||||
2021-10-27 | Be explicit about operator precedence | David Robillard | 1 | -1/+1 | |
2021-10-27 | Fix whitespace | David Robillard | 1 | -1/+1 | |
2021-10-27 | Compile but fail at runtime if aligned allocation is not supported | David Robillard | 1 | -1/+1 | |
2021-10-27 | Remove unnecessary include | David Robillard | 1 | -1/+0 | |
2021-10-27 | Improve hash table performance slightly | David Robillard | 1 | -6/+9 | |
2021-10-27 | Fix zix_digest64() to consume all input | David Robillard | 1 | -5/+5 | |
This was a copy-paste bug since the loop in zix_digest32() worked differently. As a result only the first block was considered, making the digest nearly useless for larger values. The tests didn't (and unfortunately still don't) catch this because the 64-bit digest algorithm incorporates the size itself. Fix this by changing the loop to work the same way as zix_digest32(), so hopefully something like this doesn't happen again. | |||||
2021-10-25 | Fix incomplete header installation | David Robillard | 1 | -0/+3 | |
2021-09-18 | Fix warnings in release builds on MacOS | David Robillard | 1 | -2/+7 | |
Why only MacOS? Good question! | |||||
2021-09-18 | Update README | David Robillard | 1 | -3/+33 | |