On Wed, Jan 24, 2018 at 12:14:14PM +0100, Michael Haggerty wrote: > We can return an empty iterator not only if the `packed-refs` file is > missing, but also if it is empty or if there are no references whose > names succeed `prefix`. Optimize away those cases as well by moving > the call to `find_reference_location()` higher in the function and > checking whether the determined start position is the same as > `snapshot->eof`. (This is possible now because the previous commit > made `find_reference_location()` robust against empty snapshots.) Makes sense. > @@ -937,11 +942,6 @@ static struct ref_iterator *packed_ref_iterator_begin( > iter->snapshot = snapshot; > acquire_snapshot(snapshot); > > - if (prefix && *prefix) > - start = find_reference_location(snapshot, prefix, 0); > - else > - start = snapshot->start; > - I did a double-take here that we are now looking at the snapshot without calling acquire_snapshot(). But that function is just about taking a refcount on it. The actual acquisition of data happens in get_snapshot(). -Peff