Skip to content

Commit b1bddad

Browse files
committed
refactor: remove unnecessary unsafe by using chunks_mut()
This was probably a left-over from times where there was a static requirement on the chunks processing. Maybe… .
1 parent 0854024 commit b1bddad

File tree

2 files changed

+5
-14
lines changed

2 files changed

+5
-14
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,10 @@ Follow linked crate name for detailed status. Please note that all crates follow
9090
* `gitoxide-core`
9191
* **very early**
9292
* [git-index](https://github.com/Byron/gitoxide/blob/main/crate-status.md#git-index)
93+
* [git-worktree](https://github.com/Byron/gitoxide/blob/main/crate-status.md#git-worktree)
9394
* [git-bitmap](https://github.com/Byron/gitoxide/blob/main/crate-status.md#git-bitmap)
9495
* **idea**
9596
* [git-revision](https://github.com/Byron/gitoxide/blob/main/crate-status.md#git-revision)
96-
* [git-worktree](https://github.com/Byron/gitoxide/blob/main/crate-status.md#git-worktree)
9797
* [git-tui](https://github.com/Byron/gitoxide/blob/main/crate-status.md#git-tui)
9898
* [git-bundle](https://github.com/Byron/gitoxide/blob/main/crate-status.md#git-bundle)
9999

git-pack/src/data/output/entry/iter_from_counts.rs

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -56,31 +56,20 @@ where
5656
);
5757
let (chunk_size, thread_limit, _) =
5858
parallel::optimize_chunk_size_and_thread_limit(chunk_size, Some(counts.len()), thread_limit, None);
59-
let chunks = util::ChunkRanges::new(chunk_size, counts.len());
6059
{
6160
let progress = Arc::new(parking_lot::Mutex::new(progress.add_child("resolving")));
6261
progress.lock().init(None, git_features::progress::count("counts"));
6362
let enough_counts_present = counts.len() > 4_000;
6463
let start = std::time::Instant::now();
6564
parallel::in_parallel_if(
6665
|| enough_counts_present,
67-
chunks.clone(),
66+
counts.chunks_mut(chunk_size),
6867
thread_limit,
6968
|_n| Vec::<u8>::new(),
7069
{
7170
let progress = Arc::clone(&progress);
72-
let counts = &counts;
7371
let db = db.clone();
74-
move |chunk_range, buf| {
75-
let chunk = {
76-
let c = &counts[chunk_range];
77-
let mut_ptr = c.as_ptr() as *mut output::Count;
78-
// SAFETY: We know that 'chunks' is only non-overlapping slices, and this function owns `counts`.
79-
#[allow(unsafe_code)]
80-
unsafe {
81-
std::slice::from_raw_parts_mut(mut_ptr, c.len())
82-
}
83-
};
72+
move |chunk, buf| {
8473
let chunk_size = chunk.len();
8574
for count in chunk {
8675
use crate::data::output::count::PackLocation::*;
@@ -135,8 +124,10 @@ where
135124
index
136125
}
137126
};
127+
138128
let counts = Arc::new(counts);
139129
let progress = Arc::new(parking_lot::Mutex::new(progress));
130+
let chunks = util::ChunkRanges::new(chunk_size, counts.len());
140131

141132
parallel::reduce::Stepwise::new(
142133
chunks.enumerate(),

0 commit comments

Comments
 (0)