Re: [PATCH v7 5/7] read-cache: load cache extensions on a worker thread
From: Duy Nguyen <hidden>
Date: 2018-10-01 15:51:08
On Mon, Oct 1, 2018 at 3:46 PM Ben Peart [off-list ref] wrote:
quoted hunk ↗ jump to hunk
@@ -1890,6 +1891,46 @@ static size_t estimate_cache_size(size_t ondisk_size, unsigned int entries) static size_t read_eoie_extension(const char *mmap, size_t mmap_size); static void write_eoie_extension(struct strbuf *sb, git_hash_ctx *eoie_context, size_t offset); +struct load_index_extensions +{ +#ifndef NO_PTHREADS + pthread_t pthread; +#endif + struct index_state *istate; + const char *mmap; + size_t mmap_size; + unsigned long src_offset; +}; + +static void *load_index_extensions(void *_data) +{ + struct load_index_extensions *p = _data; + unsigned long src_offset = p->src_offset; + + while (src_offset <= p->mmap_size - the_hash_algo->rawsz - 8) { + /* After an array of active_nr index entries, + * there can be arbitrary number of extended + * sections, each of which is prefixed with + * extension name (4-byte) and section length + * in 4-byte network byte order. + */ + uint32_t extsize; + memcpy(&extsize, p->mmap + src_offset + 4, 4); + extsize = ntohl(extsize);
This could be get_be32() so that the next person will not need to do another cleanup patch.
quoted hunk ↗ jump to hunk
+ if (read_index_extension(p->istate, + p->mmap + src_offset, + p->mmap + src_offset + 8, + extsize) < 0) {
This alignment is misleading because the conditions are aligned with
the code block below. If you can't align it with the '(', then just
add another tab.
+ munmap((void *)p->mmap, p->mmap_size);
This made me pause for a bit since we should not need to cast back to void *. It turns out you need this because mmap pointer is const. But you don't even need to munmap here. We're dying, the OS will clean everything up.
quoted hunk ↗ jump to hunk
+ die(_("index file corrupt")); + } + src_offset += 8; + src_offset += extsize; + } + + return NULL; +}
-- Duy