On Wed, Apr 13, 2016 at 7:32 AM, David Turner <dturner@xxxxxxxxxxxxxxxx> wrote: > +NOTES > +----- > + > +$GIT_DIR/index-helper.path is a symlink In multiple worktree context, this file will be per-worktree. So we have one daemon per worktree. I think that's fine. > to a directory in $TMPDIR > +containing a Unix domain socket called 's' that the daemon reads > +commands from. Oops. I stand corrected, now it's one daemon per repository... Probably good to hide the socket path in $GIT_DIR though, people may protect it with dir permission of one of ancestor directories. > The directory will also contain files named > +"git-index-<SHA1>". These are used as backing stores for shared > +memory. Normally the daemon will clean up these files when it exits > +or when they are no longer relevant. But if it crashes, some objects > +could remain there and they can be safely deleted with "rm" > +command. Alternatively, we could store all these in $GIT_DIR/helper or something and clean up automatically when index-helper starts. But I guess at least with TMPDIR we have a chance to put them on tmpfs. > diff --git a/git-compat-util.h b/git-compat-util.h > index c07e0c1..8b878fe 100644 > --- a/git-compat-util.h > +++ b/git-compat-util.h > @@ -1045,4 +1046,21 @@ struct tm *git_gmtime_r(const time_t *, struct tm *); > #define getc_unlocked(fh) getc(fh) > #endif > > +#ifdef __linux__ > +#define UNIX_PATH_MAX 108 > +#elif defined(__APPLE__) || defined(BSD) > +#define UNIX_PATH_MAX 104 > +#else > +/* > + * Quoth POSIX: The size of sun_path has intentionally been left > + * undefined. This is because different implementations use different > + * sizes. For example, 4.3 BSD uses a size of 108, and 4.4 BSD uses a > + * size of 104. Since most implementations originate from BSD > + * versions, the size is typically in the range 92 to 108. > + * > + * Thanks, POSIX! Super-helpful! Hope we don't overflow any buffers! > + */ > +#define UNIX_PATH_MAX 92 > +#endif > + This looks like dead code (or at least not used in this patch). > +static int poke_daemon(struct index_state *istate, > + const struct stat *st, int refresh_cache) > +{ > + int fd; > + int ret = 0; > + const char *socket_path; > + > + /* if this is from index-helper, do not poke itself (recursively) */ > + if (istate->to_shm) > + return 0; > + > + socket_path = index_helper_path("s"); > + if (!socket_path) > + return -1; > + > + fd = unix_stream_connect(socket_path); > + if (refresh_cache) { > + ret = write_in_full(fd, "refresh", 8) != 8; Since we've moved to unix socket and had bidirectional communication, it's probably a good idea to read an "ok" back, giving index-helper time to prepare the cache. As I recall the last discussion with Johannes, missing a cache here when the index is around 300MB could hurt more than wait patiently once and have it ready next time. > + } else { > + ret = write_in_full(fd, "poke", 5) != 5; > + } > + > + close(fd); > + return ret; > +} -- Duy -- 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