Thread (107 messages) 107 messages, 11 authors, 2018-11-15

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help