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

Re: [RFC][PATCH] t-prio-queue: simplify using compound literals

From
René Scharfe <l.s.r@web.de>
Date
Apr 6, 2024, 07:06 UTC
Message-ID
<88f2063e-bddb-4479-a0c1-5bad582b9fe9@web.de>
In-Reply-To
<xmqqedbjtqnr.fsf@gitster.g>
Am 06.04.24 um 00:01 schrieb Junio C Hamano:
Show 15 quoted lines
> Jeff King <peff@peff.net> writes:
>
>> Yeah, this seems pretty reasonable. I think we've traditionally been
>> hesitant to pass or return structs by value, but that's mostly
>> superstition.
>
> We should still be hesitant against the practice to the same degree
> that we are hesitant against struct assignment, especially when the
> struct is of nontrivial size, or the struct has a pointer member
> whose memory ownership semantics goes against shallow copying of the
> struct.
>
> In this particular case, I do not know offhand if .strftime_fmt is
> safe to be shallowly copied, but I trust you two know and/or have
> already looked at the implications.

date_mode_from_type() sets .strftime_fmt to NULL in the struct date_mode it creates and returns. Giving a reference to it to date_mode_release() is a safe NOOP.

show_date() passes .strftime_fmt to strbuf_addftime() and does not retain a copy or change it.

show_ident_date() only passes its struct date_mode parameter to show_date().

format_person_part() only passes its struct date_mode parameter to show_ident_date().

format_reflog_person() only passes its struct date_mode parameter to format_person_part().

get_reflog_selector() only passes its struct date_mode parameter to show_date().

show_reflog_message() only passes its struct date_mode parameter to get_reflog_selector().

The patch doesn't change any other function signatures.

strbuf_addftime() scans the format string and passes it to strbuf_expand_step(), skip_prefix() and strftime(3). None of them change it or retain a copy of the pointer.

In other words: This patch mostly affects the read-only side of struct date_mode handling, and the date_mode_from_type() part is benign as well.

René
Previous: Junio C HamanoNext: Jeff King
Message 7 of 11 in “t-prio-queue: simplify using compound literals”
  1. René ScharfeApr 2, 2024
  2. Junio C HamanoApr 2, 2024
  3. Jeff KingApr 2, 2024
  4. René ScharfeApr 5, 2024
  5. Jeff KingApr 5, 2024
  6. Junio C HamanoApr 5, 2024
  7. René ScharfeApr 6, 2024
  8. Jeff KingApr 7, 2024
  9. Junio C HamanoApr 8, 2024
  10. Jeff KingApr 8, 2024
  11. Josh SteadmonApr 11, 2024

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.