Re: [PATCH v4] builtin/gc: correct total_ram calculation with HAVE_BSD_SYSCTL
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jul 7, 2025, 13:39 UTC
- Message-ID
- <xmqq8ql06ry9.fsf@gitster.g>
- In-Reply-To
- <20250703080111.64276-1-carenas@gmail.com>
Carlo Marcelo Arenas Belón <carenas@gmail.com> writes:
Show 17 quoted lines
> #elif defined(HAVE_BSD_SYSCTL) && (defined(HW_MEMSIZE) || defined(HW_PHYSMEM) || defined(HW_PHYSMEM64))
> - int64_t physical_memory;
> + uint64_t physical_memory = 0;
> int mib[2];
> size_t length;
>
> @@ -529,9 +529,18 @@ static uint64_t total_ram(void)
> # else
> mib[1] = HW_PHYSMEM;
> # endif
> - length = sizeof(int64_t);
> - if (!sysctl(mib, 2, &physical_memory, &length, NULL, 0))
> + length = sizeof(physical_memory);
> + if (!sysctl(mib, 2, &physical_memory, &length, NULL, 0)) {
> +# ifndef __LITTLE_ENDIAN__
> + if (length == 4) {
> + unsigned mem;Don't we guarantee that uint32_t is always available? If not, we should and use that type instead of "unsigned", I think.
Also I do not quite see the point of limiting this fallback to little-endian architectures. It wouldn't be called from any performance critical codepaths, would it?
Thanks.
Show 8 quoted lines
> + if (!sysctl(mib, 2, &mem, &length, NULL, 0)) > + physical_memory = mem; > + } > +# endif > return physical_memory; > + } > #elif defined(GIT_WINDOWS_NATIVE) > MEMORYSTATUSEX memInfo;