diff options
author | Johannes Sixt <johannes.sixt@telecom.at> | 2007-10-19 21:48:00 +0200 |
---|---|---|
committer | Shawn O. Pearce <spearce@spearce.org> | 2007-10-21 01:30:41 -0400 |
commit | 2d22c208304156892fd6674e0055a3212c1e2d2e (patch) | |
tree | 48102e69b4db1fbd0b1513df225e05fd06bb1612 /run-command.h | |
parent | cc41fa8da9b9e9d23221d3be47a80409a89732d4 (diff) | |
download | git-2d22c208304156892fd6674e0055a3212c1e2d2e.tar.gz |
Add infrastructure to run a function asynchronously.
This adds start_async() and finish_async(), which runs a function
asynchronously. Communication with the caller happens only via pipes.
For this reason, this implementation forks off a child process that runs
the function.
[sp: Style nit fixed by removing unnecessary block on if condition
inside of start_async()]
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Diffstat (limited to 'run-command.h')
-rw-r--r-- | run-command.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/run-command.h b/run-command.h index 35b9fb61f1..94e1e9d516 100644 --- a/run-command.h +++ b/run-command.h @@ -43,4 +43,26 @@ int run_command_v_opt_cd(const char **argv, int opt, const char *dir); */ int run_command_v_opt_cd_env(const char **argv, int opt, const char *dir, const char *const *env); +/* + * The purpose of the following functions is to feed a pipe by running + * a function asynchronously and providing output that the caller reads. + * + * It is expected that no synchronization and mutual exclusion between + * the caller and the feed function is necessary so that the function + * can run in a thread without interfering with the caller. + */ +struct async { + /* + * proc writes to fd and closes it; + * returns 0 on success, non-zero on failure + */ + int (*proc)(int fd, void *data); + void *data; + int out; /* caller reads from here and closes it */ + pid_t pid; +}; + +int start_async(struct async *async); +int finish_async(struct async *async); + #endif |