Jeff King <peff@xxxxxxxx> writes: > On Tue, Jun 05, 2012 at 02:56:28AM -0400, Jeff King wrote: > >> > +static int fd_to_close; >> > +void close_fd_prexec_cb(void) >> > +{ >> > + if(debug) >> > + fprintf(stderr, "close_fd_prexec_cb closing %d\n", fd_to_close); >> > + close(fd_to_close); >> > +} >> >> Note that preexec_cb does not work at all on Windows, as it assumes a >> forking model (rather than a spawn, which leaves no room to execute >> arbitrary code in the child). If all you want to do is open an extra >> pipe, then probably run-command should be extended to handle this >> (though I have no idea how complex that would be for the Windows side of >> things, it is at least _possible_, as opposed to preexec_cb, which will >> never be possible). > > I'm really tempted to do this: Why (I am slower than my usual slow self today, so pardon me)? Aren't these already protected with "ifndef WIN32"? > > -- >8 -- > Commit 35ce862 (pager: Work around window resizing bug in > 'less', 2007-01-24) causes git's pager sub-process to wait > to receive input after forking but before exec-ing the > pager. To handle this, run-command had to grow a "pre-exec > callback" feature. Unfortunately, this feature does not work > at all on Windows (where we do not fork), and interacts > poorly with run-command's parent notification system. Its > use should be discouraged. > > The bug in less was fixed in version 406, which was released > in June 2007. It is probably safe at this point to remove > our workaround. That lets us rip out the preexec_cb feature > entirely. Ah, OK. > > Signed-off-by: Jeff King <peff@xxxxxxxx> > --- > I checked, and even RHEL5 is on less 436. So besides people on antique > "I installed less from source more than 5 years ago" systems, my only > concern would be that some other pager depends on this hack in a weird > way. But I have never heard of such a thing, so... Hrm... > pager.c | 18 ------------------ > run-command.c | 10 ---------- > run-command.h | 1 - > 3 files changed, 29 deletions(-) > > diff --git a/pager.c b/pager.c > index 4dcb08d..c0b4387 100644 > --- a/pager.c > +++ b/pager.c > @@ -11,21 +11,6 @@ > * something different on Windows. > */ > > -#ifndef WIN32 > -static void pager_preexec(void) > -{ > - /* > - * Work around bug in "less" by not starting it until we > - * have real input > - */ > - fd_set in; > - > - FD_ZERO(&in); > - FD_SET(0, &in); > - select(1, &in, NULL, &in, NULL); > -} > -#endif > - > static const char *pager_argv[] = { NULL, NULL }; > static struct child_process pager_process; > > @@ -93,9 +78,6 @@ void setup_pager(void) > static const char *env[] = { "LESS=FRSX", NULL }; > pager_process.env = env; > } > -#ifndef WIN32 > - pager_process.preexec_cb = pager_preexec; > -#endif > if (start_command(&pager_process)) > return; > > diff --git a/run-command.c b/run-command.c > index 606791d..dff28a7 100644 > --- a/run-command.c > +++ b/run-command.c > @@ -394,16 +394,6 @@ fail_pipe: > unsetenv(*cmd->env); > } > } > - if (cmd->preexec_cb) { > - /* > - * We cannot predict what the pre-exec callback does. > - * Forgo parent notification. > - */ > - close(child_notifier); > - child_notifier = -1; > - > - cmd->preexec_cb(); > - } > if (cmd->git_cmd) { > execv_git_cmd(cmd->argv); > } else if (cmd->use_shell) { > diff --git a/run-command.h b/run-command.h > index 44f7d2b..850c638 100644 > --- a/run-command.h > +++ b/run-command.h > @@ -39,7 +39,6 @@ struct child_process { > unsigned stdout_to_stderr:1; > unsigned use_shell:1; > unsigned clean_on_exit:1; > - void (*preexec_cb)(void); > }; > > int start_command(struct child_process *); -- 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