"Alex Riesen" [off-list ref] writes:
... Isn't such kind of resource control _generally_ nicer to implement
in the top levels of a program?
In theory perhaps, but my understanding of our use of atexit()
is to clean them up in situations beyond the control of the top
levels of a program, most notably upon exit on signal.
Junio C Hamano, Tue, Apr 24, 2007 11:33:48 +0200:
quoted
... Isn't such kind of resource control _generally_ nicer to implement
in the top levels of a program?
In theory perhaps, but my understanding of our use of atexit()
is to clean them up in situations beyond the control of the top
levels of a program, most notably upon exit on signal.
struct git_context;
/* or whatever is the latest name for the repo bookeeping is.
It have to be passed to every git-related function anyway. */
struct lock_file *open_index_locked(struct git_context *, int die_on_error);
int commit_index_locked(struct git_context *, struct lock_file *);
... and so on.
Then let the top level call something like
git_cleanup(struct git_context *);
in its _own_ signal or atexit handlers. If it didn't setup the
handlers, than perhaps it did want it so (leaving tempfiles behind is
sometimes done on purpose). Or it _is_ a bug, but then it is clear:
you have to cleanup, and you do git's part of cleanup with
git_cleanup.