From: Junio C Hamano Date: Thu, 20 May 2021 04:46:01 GMT Subject: Re: [PATCH v2 1/3] packfile-uris: support for excluding commit object Message-ID: In-Reply-To: <73e64147b17cb382d34357c913616095b6169650.1621327467.git.dyroneteng@gmail.com> (continuing from yesterday's review) > @@ -3023,7 +3040,7 @@ static int add_object_entry_from_pack(const struct object_id *oid, > struct rev_info *revs = _data; > struct object_info oi = OBJECT_INFO_INIT; > off_t ofs; > - enum object_type type; > + static enum object_type type; > > display_progress(progress_state, ++nr_seen); > > @@ -3031,7 +3048,7 @@ static int add_object_entry_from_pack(const struct object_id *oid, > return 0; > > ofs = nth_packed_object_offset(p, pos); > - if (!want_object_in_pack(oid, 0, &p, &ofs)) > + if (!want_object_in_pack(oid, type, 0, &p, &ofs)) > return 0; > > oi.typep = &type; This change is puzzling. The first call to this helper will use BSS initialized type to call want_object_in_pack(), and then after that call says "yes, we want that object", packed_object_info() gets called to learn what type it is. And the second call would use the type of the object we previously handled, because type is a function scope static. Or if we are not that lucky and multiple threads are involved, the type we pass is from a random and unrelated object some other thread has called this helper with.