Applied, thanks.
On Tue, Apr 09, 2013 at 02:21:38PM -0500, Chris Johnsen wrote:
> A job's bufferevent has EV_WRITE enabled by default, but libevent
> internals prevent the job_write_callback from being invoked unless
> we do (at least one of):
>
> - call bufferevent_enable with EV_WRITE, or
> - call bufferevent_write with non-zero length data
>
> Either of these will enable the internal event that handles writing,
> which will eventually invoke the job_write_callback.
>
> Jobs from copy-pipe will eventually write some data, but those from
> run-shell and if-shell do not write data, so job_write_callback is
> never called. Thus, for run-shell and if-shell jobs, the writing
> half of the socket is never shutdown, and job processes that try to
> read from their stdin will hang indefinitely.
>
> To prevent this "hanging stdin" for run-shell and if-shell jobs
> (which can also hang the client's cmdq if -b is not used),
> explicitly enable EV_WRITE for all jobs.
>
> ---
>
> Sorry for not catching this earlier. I tested copy-pipe jobs that
> write to stdout/stderr, but I failed to test run-shell jobs that
> read from stdin.
>
> Nicholas even mentioned the lack of EV_WRITE in the initial patch.
> When I investigated the libevent code, I found that EV_WRITE is
> "enabled" by default, but I did not notice that the internal event
> is never actually event_add()ed unless we poke the bufferevent in
> the right way.
> ---
> job.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/job.c b/job.c
> index 6a7286a..33cdc76 100644
> --- a/job.c
> +++ b/job.c
> @@ -108,7 +108,7 @@ job_run(const char *cmd, struct session *s,
>
> job->event = bufferevent_new(job->fd, NULL, job_write_callback,
> job_callback, job);
> - bufferevent_enable(job->event, EV_READ);
> + bufferevent_enable(job->event, EV_READ|EV_WRITE);
>
> log_debug("run job %p: %s, pid %ld", job, job->cmd, (long) job->pid);
> return (job);
> --
> 1.8.2
>
>
> ------------------------------------------------------------------------------
> Precog is a next-generation analytics platform capable of advanced
> analytics on semi-structured data. The platform includes APIs for building
> apps and a phenomenal toolset for data science. Developers can use
> our toolset for easy data analysis & visualization. Get a free account!
> http://www2.precog.com/precogplatform/slashdotnewsletter
> _______________________________________________
> tmux-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/tmux-users
------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
tmux-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-users