[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Patch] channel_get_exit_status always return -1


Hi Aris,

Today I played a little bit more with exit_status and you are right, it
won't be able to get it if the channel is closed. If I just try to
channel_send_eof then it works just fine.

But now I come up with an interesting question: why I have to send eof
before I can call channel_get_exit_status? I actually tried to remove
the following lines, and I have no problem getting exit_status without
sending eof:

 int channel_get_exit_status(ssh_channel channel) {
-  if (channel->local_eof == 0) {
-    return -1;
-  }

Although right now it's not problem for me because I only need to issue
one exec, but let's imagine someone else in the future might need to
execute several commands and he needs to get exit_status for each
command before he can continue with the next. In this case, does he have
to open/close a new channel for each command? I have a strong feeling
that we should remove the above three lines; or did I miss something
else?

Thanks a lot and sorry for my long question. :)

Vic

On Sun, 2009-08-16 at 13:55 +0200, Aris Adamantiadis wrote:
> Hi Vic,
> 
> Thanks for your patch, there is indeed a problem. But your patch does 
> not resolve it the clean way. When a channel has been closed, the 
> optional exit_status message can't come anymore, hence the return -1 in 
> the code (simply removing the test may block the function forever if no 
> exit status is sent). I replaced it by a break; so it returns whatever 
> value was saved.
> 
> Regards,
> Aris
> 
> Vic Lee a écrit :
> > Hi,
> > 
> > I just found out that the channel_get_exit_status() function always
> > return -1. What I saw in the codes is that, the channel is supposed to
> > close first before we can call channel_get_exit_status; which is true
> > because it's checking "channel->local_eof == 0" in the first line of
> > that function.
> > 
> > But if I have to close the channel, why another checking "channel->open
> > == 0" to check whether the channel is open? So I tried to remove these
> > three lines, and finally it's working as expected.
> > 
> > Thanks,
> > 
> > Vic
> 



Follow-Ups:
Re: [Patch] channel_get_exit_status always return -1Aris Adamantiadis <aris@xxxxxxxxxxxx>
References:
[Patch] channel_get_exit_status always return -1Vic Lee <llyzs@xxxxxxx>
Re: [Patch] channel_get_exit_status always return -1Aris Adamantiadis <aris@xxxxxxxxxxxx>
Archive administrator: postmaster@lists.cynapses.org