aboutsummaryrefslogtreecommitdiff
path: root/lib/std/Thread.zig
AgeCommit message (Collapse)Author
2023-06-24all: migrate code to new cast builtin syntaxmlugg
Most of this migration was performed automatically with `zig fmt`. There were a few exceptions which I had to manually fix: * `@alignCast` and `@addrSpaceCast` cannot be automatically rewritten * `@truncate`'s fixup is incorrect for vectors * Test cases are not formatted, and their error locations change
2023-06-19all: zig fmt and rename "@XToY" to "@YFromX"Eric Joldasov
Signed-off-by: Eric Joldasov <bratishkaerik@getgoogleoff.me>
2023-06-17Merge pull request #16052 from mikdusan/bsd-getdentsAndrew Kelley
fix bad return types for BSDs getdents and debitrot openbsd
2023-06-17mem: rename align*Generic to mem.align*Motiejus Jakštys
Anecdote 1: The generic version is way more popular than the non-generic one in Zig codebase: git grep -w alignForward | wc -l 56 git grep -w alignForwardGeneric | wc -l 149 git grep -w alignBackward | wc -l 6 git grep -w alignBackwardGeneric | wc -l 15 Anecdote 2: In my project (turbonss) that does much arithmetic and alignment I exclusively use the Generic functions. Anecdote 3: we used only the Generic versions in the Macho Man's linker workshop.
2023-06-16migration: std.math.{min, min3, max, max3} -> `@min` & `@max`r00ster91
2023-06-15openbsd: fix std.c.getdents and debitrotMichael Dusan
- fix getdents return type usize → c_int - special-case process.zig to use sysctl instead of sysctlbyname - use struct/field pattern for sysctl HW_* constants
2023-05-25std.Thread: refining stack size from platform minimum, changes more ↵David CARLIER
targetted towards platform like Linux/musl (#15791)
2023-04-30std: fix a bunch of typosLinus Groh
The majority of these are in comments, some in doc comments which might affect the generated documentation, and a few in parameter names - nothing that should be breaking, however.
2023-04-28update codebase to use `@memset` and `@memcpy`Andrew Kelley
2023-04-21std: remove names from incorrectly named testsJacob Young
Tests that only reference decls for the purpose of analyzing more tests should be unnamed, otherwise trying to filter for just a referenced test can become impossible depending on the names.
2023-04-20Merge pull request #14696 from r00ster91/threadAndrew Kelley
std.Thread: use dead code
2023-04-12openbsd: fix thread name buffer sizeMichael Dusan
OpenBSD 7.3 changed its implementation of pthread_get_name_np/pthread_set_name_np to wrap new libc functions getthrname/setthrname and lowered the max buffer size from 32 to 24. This is not a backwards-compatible change because if we were to put in comptime version logic to use size 32 when target < 7.3 the binaries would be undefined when running on >= 7.3. It also could simply be that OpenBSD has a policy to not support older binaries running on newer releases? Regardless, the safest course is to simply use the smallest known buffer size. As an aside, this bug manifested as a "hung" std.Thread test because 7.3 pthread API never checks for error result when wrapping getthrname/setthrname. This is not a problem in std.Thread when we use the correct max buffer size because ERANGE/EINVAL become unreachable.
2023-03-15extract ThreadPool and WaitGroup from compiler to std libAndrew Kelley
2023-03-08std.os: add missing mmap errorsJan Philipp Hafer
Man page for posix lists EMFILE, man page for linux ENFILE. Also posix says "The mmap() function adds an extra reference to the file associated with the file descriptor fildes which is not removed by a subsequent close() on that file descriptor. This reference is removed when there are no more mappings to the file." It sounds counter-intuitive, that a process limit but no system limit can be exceeeded. As far as I understand, fildes is only used for file descriptor backed mmaps.
2023-02-26std.Thread: use pthread_getname_np on muslr00ster91
Starting with version 1.2.3, musl now supports pthread_getname_np: https://github.com/bminor/musl/blob/7a43f6fea9081bdd53d8a11cef9e9fab0348c53d/WHATSNEW#L2293-L2329
2023-02-24std.Thread: drop is_gnu checkr00ster91
I believe the reason we had that check in the first place was because for both `pthread_setname_np` and `pthread_getname_np` man says: ``` CONFORMING TO These functions are nonstandard GNU extensions; hence the suffix "_np" (nonportable) in the names. ``` However, this `is_gnu` check was never consistently applied; it was missing in `setName` in the Linux case. It is also missing on all other call sites for other platforms (macOS, iOS, et al.). Though, that could be because it may only apply to Linux. I think for a best-effort approach it is okay to drop this. It's probably less non-standard than man makes it out to be.
2023-02-24std.Thread.setName: use unused coder00ster91
I noticed a comment saying that the intent of a code's author was unclear. What happened is that the author forgot to put the check for whether the thread is the calling thread (`self.getHandle() == std.c.pthread_self()`) in the `if (use_pthreads)`. If the thread is the calling thread, we use `prctl` to set or get the thread's name and it does not take a thread id because it knows the id of the thread we're calling `getName` or `setName` from. I have found a source saying that using `pthread_setname_np` on either the calling thread or any other thread by thread id would work too (so we don't need to call `prctl`) but I was not sure if that is the case on all systems so we keep using `pthread_setname_np` if we have a specific thread that is not the thread we're calling from, and `prctl` otherwise.
2023-01-29std: restrict mem.span() and mem.len() to sentinel terminated pointersIsaac Freund
These functions are currently footgunny when working with pointers to arrays and slices. They just return the stated length of the array/slice without iterating and looking for the first sentinel, even if the array/slice is a sentinel terminated type. From looking at the quite small list of places in the standard library/compiler that this change breaks existing code, the new code looks to be more readable in all cases. The usage of std.mem.span/len was totally unneeded in most of the cases affected by this breaking change. We could remove these functions entirely in favor of other existing functions in std.mem such as std.mem.sliceTo(), but that would be a somewhat nasty breaking change as std.mem.span() is very widely used for converting sentinel terminated pointers to slices. It is however not at all widely used for anything else. Therefore I think it is better to break these few non-standard and potentially incorrect usages of these functions now and at some later time, if deemed worthwhile, finally remove these functions. If we wait for at least a full release cycle so that everyone adapts to this change first, updating for the removal could be a simple find and replace without needing to worry about the semantics.
2023-01-16std.Thread: make Id smaller where possibler00ster91
2022-12-13update usages of `@call`Veikka Tuominen
2022-11-04all: rename i386 to x86Ali Chraghi
2022-09-12remove pointless discardsAndrew Kelley
2022-08-30std.Thread: fix freeAndExit on x86_64-linux (#12693)biexelar
Previously, this function used incorrect registers for the munmap syscall, leading to detached threads not cleaning up. closes #12690 Co-authored-by: bxlr <biexelar@diroot.org>
2022-07-04std.Thread: fix mutable ref of temporaryAndrew Kelley
The previous code is a compile error in stage2 as well as the upcoming lang spec.
2022-05-27math: make `cast` return optional instead of an errorAli Chraghi
2022-05-17std.Thread: insert a missing `@alignCast`Andrew Kelley
stage1 has a missing compile error for this situation.
2022-05-13target: Rename sparcv9 -> sparc64Koakuma
Rename all references of sparcv9 to sparc64, to make Zig align more with other projects. Also, added new function to convert glibc arch name to Zig arch name, since it refers to the architecture as sparcv9. This is based on the suggestion by @kubkon in PR 11847. (https://github.com/ziglang/zig/pull/11487#pullrequestreview-963761757)
2022-04-26std.Thread: ResetEvent improvements (#11523)protty
* std: start removing redundant ResetEvents * src: fix other uses of std.Thread.ResetEvent * src: add builtin.sanitize_thread for tsan detection * atomic: add Atomic.fence for proper fencing with tsan * Thread: remove the other ResetEvent's and rewrite the current one * Thread: ResetEvent docs * zig fmt + WaitGroup.reset() fix * src: fix build issues for ResetEvent + tsan * Thread: ResetEvent tests * Thread: ResetEvent module doc * Atomic: replace llvm *p memory constraint with *m * panicking: handle spurious wakeups in futex.wait() when waiting for abort() * zig fmt
2022-04-23std.Thread: Mutex and Condition improvements (#11497)protty
* Thread: minor cleanups * Thread: rewrite Mutex * Thread: introduce Futex.Deadline * Thread: Condition rewrite + cleanup * Mutex: optimize lock fast path * Condition: more docs * Thread: more mutex + condition docs * Thread: remove broken Condition test * Thread: zig fmt * address review comments + fix Thread.DummyMutex in GPA * Atomic: disable bitRmw x86 inline asm for stage2 * GPA: typo mutex_init * Thread: remove noalias on stuff * Thread: comment typos + clarifications
2022-02-27std: rename `sched_yield` to `yield` and move it to `std.Thread`David John
2022-02-26fix typo on Thread's getHandle docsEndel Dreyer
2022-02-15Merge pull request #10003 from viriuwu/nt-thread-nameVeikka Tuominen
std.Thread.getName/setName: rework windows implementation
2022-02-15std.Thread(windows): use NT internals for name fnsviri
2022-02-08update RwLock to use static initialization (#10838)billzez
2022-01-29fs: Use `OpenMode` enum instead of read/write flags.Sage Hane
2022-01-11Fix a bug in std.Thread.Condition and add a basic Condition test. (#10538)afranchuk
* Fix FUTEX usage in std.Thread.Condition - It was using an old name.
2021-12-19stage1, stage2: rename c_void to anyopaque (#10316)Isaac Freund
zig fmt now replaces c_void with anyopaque to make updating code easy.
2021-12-03Merge pull request #9910 from mikdusan/dragonflyAndrew Kelley
dragonfly: port Thread.setname/getname
2021-11-30allocgate: renamed getAllocator function to allocatorLee Cannon
2021-11-30allocgate: std Allocator interface refactorLee Cannon
2021-11-30std lib API deprecations for the upcoming 0.9.0 releaseAndrew Kelley
See #3811
2021-11-15updates for haiku stdcAl Hoang
* add team_info, area_info * update signature for get_next_image_info * add error checks for haiku system calls * update and cleanup of haiku constants
2021-10-10SPARCv9: Fix freeAndExit implementationKoakuma
This fixes the wrong branch target and register check. (https://github.com/ziglang/zig/issues/9801)
2021-10-09housekeeping: return error.UnsupportedMichael Dusan
Return error at end of std.Thread.setName/getName to simplify flow-control.
2021-10-09dragonfly: port std.Thread.setname/getnameMichael Dusan
2021-09-24Initial bringup of the Solaris/Illumos portStephen Gregoratto
2021-09-01std.os reorg: regression fixes to stack_t, and std.ThreadAndrew Kelley
2021-09-01std.os reorg: more fixes caught by CIAndrew Kelley
2021-09-01std.os: more reorganization effortsAndrew Kelley
* std lib tests are passing on x86_64-linux with and without -lc * stage2 is building from source on x86_64-linux * down to 38 remaining uses of `usingnamespace`
2021-08-29zig fmt: respect trailing commas in inline assemblyjdmichaud