Hello Junio, I returned static to git_etc_gitattributes return value, but now i can't understand where to free 'system_wide'. As i understand correctly attr.c has following API for querying attributes: git_attr git_check_attr And as i see in code git_attr doesn't use git_attr_check, so now we have only git_check_attr and git_all_stars functions which are through prepare_attr_stack and bootstrap_attr_stack in it uses path which returned by system_path. So you're right if i free etc_attributes like this and git_etc_gitattributes will return static value we'll have access to freed memory if it will called again. But we have no access to etc_attributes outside bootstrap_attr_stack so where will be best place to free it? Thank you 2014-11-25 2:50 GMT+06:00 Junio C Hamano <gitster@xxxxxxxxx>: > Alex Kuleshov <kuleshovmail@xxxxxxxxx> writes: > >>> One thing to note is that this illustration does not consider memory >>> pointed at by the "system_wide" variable here (from attr.c) >>> >>> static const char *git_etc_gitattributes(void) >>> { >>> static const char *system_wide; >>> if (!system_wide) >>> system_wide = system_path(ETC_GITATTRIBUTES); >>> return system_wide; >>> } >>> >>> at the point of process exit as a "leak". >> >> But why? We allocated memory to "system_wide" with system_path, next git >> will exit somewhere with die, but system_wide didn't free... Or i'm >> wrong here too? > > It is in the same league as "static const char *git_dir" and friends > that appear in the file-scope-static of environment.c. Keeping small > things around to be cleaned up by exit() is not a crime. -- _________________________ 0xAX -- 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