[lxc-devel] fixing restoring of tty mode after lxc-start

Michel Normand michel.mno at free.fr
Sat Nov 21 11:22:11 UTC 2009


Michael Tokarev a écrit :
> Michel Normand wrote:
>> Michael Tokarev a e'crit :
>>> Hello.
>>>
>>> While trying to fix the tty mode after lxc-start, I come across
>>> lxc_close_all_inherited_fd() routine.  Which closes all fds which
>>> were inherited when lxc-start started.
>>>
>>> It's called this way:
>>>
>>>   lxc_start.c:main():
>>>     lxc_start():
>>>      lxc_spawn();
>>>      lxc_close_all_inherited_fd()
>>>      lxc_poll()
>>>
>>> The question is why lxc_close_all_inherited() is needed here.
>>> And why it is ever needed _outside_ of the container to start
>>> with.
>>>
>>> This call to close_all_inherited_fd() is the reason why tty
>>> modes are not restored after lxc-start: because stdin is now
>>> closed and hence nothing to restore.
>>>
>>> It looks like the whole inherited_fd thing is only needed in
>>> lxc_init helper binary, 
>>
>> In fact the lxc_close_all_inherited_fd function was defined
>> to cover the case of a user appli creating pipes before to fork
>> the lxc-start, and to use these pipes to communicate with the appli
>> started inside the container.
> 
> There's no need to close these pipes in lxc_start itself.  For that,
> it is enough to close them in the child of lxc_start, the one which
> becomes container's init process.  Which is exactly what I'm talking
> about here.

This would not cover all possible usage of the pipe.
eg: parent on read() of the pipe will not be able to leave
when the application is closing it's write side if lxc is still
holding the fds.


> 
>> For that purpose it was required for lxc to not keep a reference
>> on these fds while lxc code is waiting for the appli to run up to its 
>> end.
>> This is the reason why this function is called in two places
>> in lxc_init.c and start.c
> 
> Note that lxc_init, like lxc_start's child, runs inside the container.

yes it is, and it must also release the inherited fds for the
explained user case, and for the same reason as in start.c

> 
> Thanks!
> 
> /mjt
> 
> 





More information about the lxc-devel mailing list