git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] Do not make trace.c/getnanotime an inlined function

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 29, 2014, 17:48 UTC
Message-ID
<xmqqa95iuxlf.fsf@gitster.dls.corp.google.com>
In-Reply-To
<CACsJy8ArOU7WF4fiy5vn8zq5y6Vm5JxgTf+Tiai_WOeMSj--Ug@mail.gmail.com>
Duy Nguyen <pclouds@gmail.com> writes:
Show 25 quoted lines
> On Sun, Sep 28, 2014 at 2:50 PM, Ben Walton <bdwalton@gmail.com> wrote:
>> Oracle Studio compilers don't allow for static variables in functions
>> that are defined to be inline. GNU C does permit this. Let's reference
>> the C99 standard though, which doesn't allow for inline functions to
>> contain modifiable static variables.
>>
>> Signed-off-by: Ben Walton <bdwalton@gmail.com>
>> ---
>>  trace.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/trace.c b/trace.c
>> index b6f25a2..4778608 100644
>> --- a/trace.c
>> +++ b/trace.c
>> @@ -385,7 +385,7 @@ static inline uint64_t gettimeofday_nanos(void)
>>   * Returns nanoseconds since the epoch (01/01/1970), for performance tracing
>>   * (i.e. favoring high precision over wall clock time accuracy).
>>   */
>> -inline uint64_t getnanotime(void)
>> +uint64_t getnanotime(void)
>>  {
>>         static uint64_t offset;
>
> Would moving this offset outside getnanotime() work?
I am not sure what the definition of "work" is.

The function computes the difference between the returned value from gettimeofday(2) and a custom highres_nanos() just once and returns the value it got from gettimeofday the first time, and then for subsequent calls massages the returned value from highres_nanos() to be consistent with the value returned from gettimeofday using the offset it computed in the first call.

If we have two copies of this function, two independent probes to these pair of underlying functions will be made to compute their offsets. With perfect pair of clocks that may not matter, but it just feels wrong to me.

Besides, I wonder what happens if the computed offset happen to be 1, which is used as a sentinel.

Previous: Duy NguyenNext: Duy Nguyen
Message 4 of 7 in “Do not make trace.c/getnanotime an inlined function”
  1. Do not make trace.c/getnanotime an inlined functionBen Walton, Sep 28, 2014
  2. Johannes SixtSep 28, 2014
  3. Duy NguyenSep 29, 2014
  4. Junio C HamanoSep 29, 2014
  5. Duy NguyenSep 30, 2014
  6. Junio C HamanoSep 30, 2014
  7. Johannes SixtSep 29, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.