aboutsummaryrefslogtreecommitdiff
path: root/rtic-time/src/linked_list.rs
diff options
context:
space:
mode:
authorGravatar Emil Fresk <emil.fresk@gmail.com> 2023-02-18 09:43:06 +0100
committerGravatar Henrik Tjäder <henrik@tjaders.com> 2023-03-01 00:35:20 +0100
commit1cda61fbda205920517f7b63af90c97c38ff9af6 (patch)
treece3921072005300ab089c72deaae41dc0cf3a61b /rtic-time/src/linked_list.rs
parent002d0b0d1685473f0f81cd17346d119fc671ad9c (diff)
downloadrtic-1cda61fbda205920517f7b63af90c97c38ff9af6.tar.gz
rtic-1cda61fbda205920517f7b63af90c97c38ff9af6.tar.zst
rtic-1cda61fbda205920517f7b63af90c97c38ff9af6.zip
Make some linked list operations unsafe, and document their safety at usage
Diffstat (limited to 'rtic-time/src/linked_list.rs')
-rw-r--r--rtic-time/src/linked_list.rs18
1 files changed, 12 insertions, 6 deletions
diff --git a/rtic-time/src/linked_list.rs b/rtic-time/src/linked_list.rs
index de5ea2a4..d4256c9d 100644
--- a/rtic-time/src/linked_list.rs
+++ b/rtic-time/src/linked_list.rs
@@ -93,10 +93,12 @@ impl<T: PartialOrd + Clone> LinkedList<T> {
/// Insert a new link into the linked list.
/// The return is (was_empty, address), where the address of the link is for use with `delete`.
- pub fn insert(&self, val: Pin<&mut Link<T>>) -> (bool, usize) {
+ ///
+ /// SAFETY: The pinned link must live until it is removed from this list.
+ pub unsafe fn insert(&self, val: Pin<&Link<T>>) -> (bool, usize) {
cs::with(|_| {
// SAFETY: This datastructure does not move the underlying value.
- let val = unsafe { val.get_unchecked_mut() };
+ let val = val.get_ref();
let addr = val as *const _ as usize;
// Make sure all previous writes are visible
@@ -111,7 +113,8 @@ impl<T: PartialOrd + Clone> LinkedList<T> {
let head_ref = if let Some(head_ref) = unsafe { head.as_ref() } {
head_ref
} else {
- self.head.store(val, Ordering::Relaxed);
+ self.head
+ .store(val as *const _ as *mut _, Ordering::Relaxed);
return (true, addr);
};
@@ -121,7 +124,8 @@ impl<T: PartialOrd + Clone> LinkedList<T> {
val.next.store(head, Ordering::Relaxed);
// `val` is now first in the queue
- self.head.store(val, Ordering::Relaxed);
+ self.head
+ .store(val as *const _ as *mut _, Ordering::Relaxed);
return (false, addr);
}
@@ -139,7 +143,8 @@ impl<T: PartialOrd + Clone> LinkedList<T> {
val.next.store(next, Ordering::Relaxed);
// Insert `val`
- curr.next.store(val, Ordering::Relaxed);
+ curr.next
+ .store(val as *const _ as *mut _, Ordering::Relaxed);
return (false, addr);
}
@@ -150,7 +155,8 @@ impl<T: PartialOrd + Clone> LinkedList<T> {
}
// No next, write link to last position in list
- curr.next.store(val, Ordering::Relaxed);
+ curr.next
+ .store(val as *const _ as *mut _, Ordering::Relaxed);
(false, addr)
})
198c0aa9c6bacf42f9363281&follow=1'>commitdiff
path: root/src/bunfig.zig (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2022-03-02Remove function from bindingsGravatar Jarred Sumner 1-7/+1
2022-03-02`DELETE` headerGravatar Jarred Sumner 1-0/+4
2022-03-02[bun.js] fix unicode handling in RouterGravatar Jarred Sumner 1-3/+9
2022-03-02[bun.js] Fix crash due to incorrectly creating stringGravatar Jarred Sumner 1-3/+1
2022-03-02remove a threadlocalGravatar Jarred Sumner 2-12/+908
2022-03-02cleanup error printingGravatar Jarred Sumner 2-2/+5
2022-03-02Update global.zigGravatar Jarred Sumner 1-0/+17
2022-03-02Update fs.zigGravatar Jarred Sumner 1-0/+3
2022-03-02[bun run] Set more environment variablesGravatar Jarred Sumner 2-0/+55
2022-03-02clean up error message when CLI flag is invalidGravatar Jarred Sumner 1-1/+4
2022-03-02add `bun pm cache` and `bun pm cache rm` commandsGravatar Jarred Sumner 1-0/+20
2022-03-01[bun.js] `ResolveError.prototype.toString()` `BuildError.prototype.toString()`Gravatar Jarred Sumner 1-2/+94
2022-03-01add `allowBunRuntime` and `autoImportJSX` flags to Bun.TranspilerGravatar Jarred Sumner 1-1/+32
2022-03-01cleanup code that checks if it should send an HTTP bodyGravatar Jarred Sumner 2-6/+18
2022-03-01[JS Parser] Fix bug with `super` from adding class static blocksGravatar Jarred Sumner 1-1/+12
2022-03-01Update bundler.zigGravatar Jarred Sumner 1-1/+5
2022-03-01Remove unused boolGravatar Jarred Sumner 1-3/+0
2022-03-01[bun.js] Allow disabling runtime imports so bun can build for nodeGravatar Jarred Sumner 3-5/+11
2022-03-01[JS Parser] Make auto importing JSX a flag so the API is easierGravatar Jarred Sumner 1-295/+297
2022-03-01cleanupGravatar Jarred Sumner 1-2/+2
2022-03-01Update javascript.zigGravatar Jarred Sumner 1-50/+0
2022-03-01[bun.js] shim async fsGravatar Jarred Sumner 2-36/+226
2022-03-01[bun.js] Implement `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`Gravatar Jarred Sumner 11-41/+295
2022-02-27Update transpiler.test.jsGravatar Jarred Sumner 1-0/+8
2022-02-27[TS] Make `export {type foo}` output consistent with TS parserGravatar Jarred Sumner 1-3/+45
2022-02-27WASMGravatar Jarred Sumner 83-690/+10789