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
Duy Nguyen <pclouds@gmail.com>
Date
Sep 30, 2014, 09:25 UTC
Message-ID
<CACsJy8Cnx=KQ02MT354Ly=o04=smbOhnrgCXLNa_tAtOPGmSdA@mail.gmail.com>
In-Reply-To
<xmqqa95iuxlf.fsf@gitster.dls.corp.google.com>
On Tue, Sep 30, 2014 at 12:48 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 40 quoted lines
> Duy Nguyen <pclouds@gmail.com> writes:
>
>> 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.

Hmm.. no. Even if the function is inlined in multiple places, inline code still points to the same "offset" variable. So the gettimeofday_nanos()/highres_nanos() pair should only be called once. Tested with gcc.

-- 
Duy
Previous: Junio C HamanoNext: Junio C Hamano
Message 5 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.