All of lore.kernel.org
 help / color / mirror / Atom feed
From: Justin Tobler <jltobler@gmail.com>
To: Patrick Steinhardt <ps@pks.im>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 06/17] odb/source: make `free()` function pluggable
Date: Wed, 4 Mar 2026 14:54:45 -0600	[thread overview]
Message-ID: <aaiaNHaLPhYSK-oK@denethor> (raw)
In-Reply-To: <20260223-b4-pks-odb-source-pluggable-v1-6-253bac1db598@pks.im>

On 26/02/23 05:17PM, Patrick Steinhardt wrote:
> Introduce a new callback function in `struct odb_source` to make the
> function pluggable.
> 
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
>  odb/source-files.c | 7 ++++---
>  odb/source-files.h | 3 ---
>  odb/source.c       | 4 +---
>  odb/source.h       | 6 ++++++
>  4 files changed, 11 insertions(+), 9 deletions(-)
> 
> diff --git a/odb/source-files.c b/odb/source-files.c
> index 7496e1d9f8..65d7805c5a 100644
> --- a/odb/source-files.c
> +++ b/odb/source-files.c
> @@ -18,10 +18,9 @@ static void odb_source_files_reparent(const char *name UNUSED,
>  	files->base.path = path;
>  }
>  
> -void odb_source_files_free(struct odb_source_files *files)
> +static void odb_source_files_free(struct odb_source *source)
>  {
> -	if (!files)
> -		return;
> +	struct odb_source_files *files = odb_source_files_downcast(source);

Now each callback will be responsible for downcasting to the concrete
type. Looks good.

>  	chdir_notify_unregister(NULL, odb_source_files_reparent, files);
>  	odb_source_loose_free(files->loose);
>  	packfile_store_free(files->packed);
> @@ -40,6 +39,8 @@ struct odb_source_files *odb_source_files_new(struct object_database *odb,
>  	files->loose = odb_source_loose_new(&files->base);
>  	files->packed = packfile_store_new(&files->base);
>  
> +	files->base.free = odb_source_files_free;

Callback is registered.

> +
>  	/*
>  	 * Ideally, we would only ever store absolute paths in the source. This
>  	 * is not (yet) possible though because we access and assume relative
> diff --git a/odb/source-files.h b/odb/source-files.h
> index 803fa995fb..23a3b4e04b 100644
> --- a/odb/source-files.h
> +++ b/odb/source-files.h
> @@ -21,9 +21,6 @@ struct odb_source_files *odb_source_files_new(struct object_database *odb,
>  					      const char *path,
>  					      bool local);
>  
> -/* Free the object source and release all associated resources. */
> -void odb_source_files_free(struct odb_source_files *files);

The forward header is no longer needed as this function becomes an
internal detail of how the "files" source is impelmented.

> -
>  /*
>   * Cast the given object database source to the files backend. This will cause
>   * a BUG in case the source doesn't use this backend.
> diff --git a/odb/source.c b/odb/source.c
> index c7dcc528f6..7993dcbd65 100644
> --- a/odb/source.c
> +++ b/odb/source.c
> @@ -25,11 +25,9 @@ void odb_source_init(struct odb_source *source,
>  
>  void odb_source_free(struct odb_source *source)
>  {
> -	struct odb_source_files *files;
>  	if (!source)
>  		return;
> -	files = odb_source_files_downcast(source);
> -	odb_source_files_free(files);
> +	source->free(source);

Freeing the source can now be gone generically for different sources.
Nice. :)

>  }
>  
>  void odb_source_release(struct odb_source *source)
> diff --git a/odb/source.h b/odb/source.h
> index a1f2f8fdb1..f84da59ef0 100644
> --- a/odb/source.h
> +++ b/odb/source.h
> @@ -52,6 +52,12 @@ struct odb_source {
>  	 * the current working directory.
>  	 */
>  	char *path;
> +
> +	/*
> +	 * This callback is expected to free the underlying object database source and
> +	 * all associated resources. The function will never be called with a NULL pointer.
> +	 */
> +	void (*free)(struct odb_source *source);

Looks good.

-Justin

  reply	other threads:[~2026-03-04 20:54 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-23 16:17 [PATCH 00/17] odb: make object database sources pluggable Patrick Steinhardt
2026-02-23 16:17 ` [PATCH 01/17] odb: split `struct odb_source` into separate header Patrick Steinhardt
2026-03-04 15:55   ` Justin Tobler
2026-03-05 13:23     ` Patrick Steinhardt
2026-03-05 16:57       ` Justin Tobler
2026-02-23 16:17 ` [PATCH 02/17] odb: introduce "files" source Patrick Steinhardt
2026-03-04 16:57   ` Justin Tobler
2026-03-05 13:23     ` Patrick Steinhardt
2026-03-05 10:20   ` Karthik Nayak
2026-02-23 16:17 ` [PATCH 03/17] odb: embed base source in the "files" backend Patrick Steinhardt
2026-03-04 17:40   ` Justin Tobler
2026-03-05 13:23     ` Patrick Steinhardt
2026-03-05 17:06       ` Justin Tobler
2026-03-05 10:45   ` Karthik Nayak
2026-03-05 13:23     ` Patrick Steinhardt
2026-02-23 16:17 ` [PATCH 04/17] odb: move reparenting logic into respective subsystems Patrick Steinhardt
2026-03-04 20:39   ` Justin Tobler
2026-03-05 13:23     ` Patrick Steinhardt
2026-02-23 16:17 ` [PATCH 05/17] odb/source: introduce source type for robustness Patrick Steinhardt
2026-03-04 20:46   ` Justin Tobler
2026-03-05 13:07     ` Patrick Steinhardt
2026-03-05 10:50   ` Karthik Nayak
2026-02-23 16:17 ` [PATCH 06/17] odb/source: make `free()` function pluggable Patrick Steinhardt
2026-03-04 20:54   ` Justin Tobler [this message]
2026-02-23 16:17 ` [PATCH 07/17] odb/source: make `reprepare()` " Patrick Steinhardt
2026-03-04 21:08   ` Justin Tobler
2026-03-05 13:23     ` Patrick Steinhardt
2026-02-23 16:17 ` [PATCH 08/17] odb/source: make `close()` " Patrick Steinhardt
2026-03-04 21:03   ` Justin Tobler
2026-03-05 13:23     ` Patrick Steinhardt
2026-03-05 17:11       ` Justin Tobler
2026-03-05 10:58   ` Karthik Nayak
2026-03-05 13:23     ` Patrick Steinhardt
2026-02-23 16:18 ` [PATCH 09/17] odb/source: make `read_object_info()` " Patrick Steinhardt
2026-03-04 21:33   ` Justin Tobler
2026-02-23 16:18 ` [PATCH 10/17] odb/source: make `read_object_stream()` " Patrick Steinhardt
2026-03-05 11:13   ` Karthik Nayak
2026-03-05 13:23     ` Patrick Steinhardt
2026-02-23 16:18 ` [PATCH 11/17] odb/source: make `for_each_object()` " Patrick Steinhardt
2026-03-05 12:40   ` Karthik Nayak
2026-03-05 13:07   ` Karthik Nayak
2026-03-05 13:30     ` Patrick Steinhardt
2026-02-23 16:18 ` [PATCH 12/17] odb/source: make `freshen_object()` " Patrick Steinhardt
2026-02-23 16:18 ` [PATCH 13/17] odb/source: make `write_object()` " Patrick Steinhardt
2026-02-23 16:18 ` [PATCH 14/17] odb/source: make `write_object_stream()` " Patrick Steinhardt
2026-02-23 16:18 ` [PATCH 15/17] odb/source: make `read_alternates()` " Patrick Steinhardt
2026-03-04 21:49   ` Justin Tobler
2026-03-05 13:23     ` Patrick Steinhardt
2026-02-23 16:18 ` [PATCH 16/17] odb/source: make `write_alternate()` " Patrick Steinhardt
2026-02-23 16:18 ` [PATCH 17/17] odb/source: make `begin_transaction()` " Patrick Steinhardt
2026-03-04 22:01   ` Justin Tobler
2026-03-05 13:24     ` Patrick Steinhardt
2026-02-23 16:21 ` [PATCH 00/17] odb: make object database sources pluggable Patrick Steinhardt
2026-02-23 21:59   ` Junio C Hamano
2026-02-24  8:41     ` Patrick Steinhardt
2026-03-05 13:11   ` Karthik Nayak
2026-03-05 14:19 ` [PATCH v2 " Patrick Steinhardt
2026-03-05 14:19   ` [PATCH v2 01/17] odb: split `struct odb_source` into separate header Patrick Steinhardt
2026-03-05 14:19   ` [PATCH v2 02/17] odb: introduce "files" source Patrick Steinhardt
2026-03-05 14:19   ` [PATCH v2 03/17] odb: embed base source in the "files" backend Patrick Steinhardt
2026-03-05 14:19   ` [PATCH v2 04/17] odb: move reparenting logic into respective subsystems Patrick Steinhardt
2026-03-05 14:19   ` [PATCH v2 05/17] odb/source: introduce source type for robustness Patrick Steinhardt
2026-03-05 14:19   ` [PATCH v2 06/17] odb/source: make `free()` function pluggable Patrick Steinhardt
2026-03-05 14:19   ` [PATCH v2 07/17] odb/source: make `reprepare()` " Patrick Steinhardt
2026-03-05 14:19   ` [PATCH v2 08/17] odb/source: make `close()` " Patrick Steinhardt
2026-03-05 14:19   ` [PATCH v2 09/17] odb/source: make `read_object_info()` " Patrick Steinhardt
2026-03-05 14:19   ` [PATCH v2 10/17] odb/source: make `read_object_stream()` " Patrick Steinhardt
2026-03-05 14:19   ` [PATCH v2 11/17] odb/source: make `for_each_object()` " Patrick Steinhardt
2026-03-05 14:19   ` [PATCH v2 12/17] odb/source: make `freshen_object()` " Patrick Steinhardt
2026-03-05 14:19   ` [PATCH v2 13/17] odb/source: make `write_object()` " Patrick Steinhardt
2026-03-05 14:19   ` [PATCH v2 14/17] odb/source: make `write_object_stream()` " Patrick Steinhardt
2026-03-05 14:19   ` [PATCH v2 15/17] odb/source: make `read_alternates()` " Patrick Steinhardt
2026-03-05 14:19   ` [PATCH v2 16/17] odb/source: make `write_alternate()` " Patrick Steinhardt
2026-03-05 14:19   ` [PATCH v2 17/17] odb/source: make `begin_transaction()` " Patrick Steinhardt
2026-03-05 17:42   ` [PATCH v2 00/17] odb: make object database sources pluggable Justin Tobler
2026-03-05 20:42   ` Junio C Hamano
2026-03-10 12:19     ` Patrick Steinhardt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aaiaNHaLPhYSK-oK@denethor \
    --to=jltobler@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=ps@pks.im \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.