Re: [PATCH 15/17] commit-slab: provide a static initializer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jeff King <peff@xxxxxxxx> writes:

> Callers currently must use init_foo_slab() at runtime before
> accessing a slab. For global slabs, it's much nicer if we
> can initialize them in BSS, so that each user does not have
> to add code to check-and-initialize.
>
> Signed-off-by: Jeff King <peff@xxxxxxxx>
> ---
> There was no comment on this one in v1. I'd be curious if anyone has
> comments on what I wrote in:
>
>   http://article.gmane.org/gmane.comp.version-control.git/251099

Why do we need an initialiser at this point (in other words, how
have other existing slab users coped without having one)?

I think they call init_*_slab() when the slab is needed/used the
first time (e.g. it is not even worth initialising indegree slab
unless we are sorting in topo order).

Unlike the author-date and indegree slabs, there are too many entry
points that may want access to the buffer slab (save_commit_buffer's
default being on does not help us either), so it would be much less
error prone to always initialise a static slab like this patch does,
I guess.


>  commit-slab.h | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
>
> diff --git a/commit-slab.h b/commit-slab.h
> index cc114b5..375c9c7 100644
> --- a/commit-slab.h
> +++ b/commit-slab.h
> @@ -117,4 +117,16 @@ static int stat_ ##slabname## realloc
>   * catch because GCC silently parses it by default.
>   */
>  
> +/*
> + * Statically initialize a commit slab named "var". Note that this
> + * evaluates "stride" multiple times! Example:
> + *
> + *   struct indegree indegrees = COMMIT_SLAB_INIT(1, indegrees);
> + *
> + */
> +#define COMMIT_SLAB_INIT(stride, var) { \
> +	COMMIT_SLAB_SIZE / sizeof(**((var).slab)) / (stride), \
> +	(stride), 0, NULL \
> +}
> +
>  #endif /* COMMIT_SLAB_H */
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]