#include "git-compat-util.h" #include "hex.h" #include "strbuf.h" #include "trace2/tr2_tbuf.h" #include "trace2/tr2_sid.h" #define TR2_ENVVAR_PARENT_SID … static struct strbuf tr2sid_buf = …; static int tr2sid_nr_git_parents; /* * Compute the final component of the SID representing the current process. * This should uniquely identify the process and be a valid filename (to * allow writing trace2 data to per-process files). It should also be fixed * length for possible use as a database key. * * "<yyyymmdd>T<hhmmss>.<fraction>Z-<host>-<process>" * * where <host> is a 9 character string: * "H<first_8_chars_of_sha1_of_hostname>" * "Localhost" when no hostname. * * where <process> is a 9 character string containing the least significant * 32 bits in the process-id. * "P<pid>" * (This is an abribrary choice. On most systems pid_t is a 32 bit value, * so limit doesn't matter. On larger systems, a truncated value is fine * for our purposes here.) */ static void tr2_sid_append_my_sid_component(void) { … } /* * Compute a "unique" session id (SID) for the current process. This allows * all events from this process to have a single label (much like a PID). * * Export this into our environment so that all child processes inherit it. * * If we were started by another git instance, use our parent's SID as a * prefix. (This lets us track parent/child relationships even if there * is an intermediate shell process.) * * Additionally, count the number of nested git processes. */ static void tr2_sid_compute(void) { … } const char *tr2_sid_get(void) { … } int tr2_sid_depth(void) { … } void tr2_sid_release(void) { … }