Re: [Xenomai-core] Auto closing of file descriptors and fork.

2007-12-27 Thread Jan Kiszka
Gilles Chanteperdrix wrote:
> On Dec 27, 2007 4:09 PM, Jan Kiszka <[EMAIL PROTECTED]> wrote:
>> Gilles Chanteperdrix wrote:
>>> On Dec 27, 2007 12:58 PM, Jan Kiszka <[EMAIL PROTECTED]> wrote:
 Gilles Chanteperdrix wrote:
> Gilles Chanteperdrix wrote:
>  > Hi,
>  >
>  > I have a problem with auto closing of file descriptors and fork. I
>  > have an application (a modified pppd, to name it), which in a certain
>  > mode (pppd "updetach" mode) opens some real-time file descriptors,
>  > forks and exit the parent, continuing to use the file descriptors in
>  > the child. The problem is that when exiting the parent, file
>  > descriptors are automatically destroyed and therefore can not be used
>  > in the child.
>  >
>  > Any ideas for a fix ?
>
> More precisely. We need to trap the "fork" event, and handle it in the
> skins event callbacks. We will need to create a new ppd structure for
> the new process, but what will we do with the skin objects ? If we keep
> the same objects for the child and increment a reference count, we will
> end up with an object that need to be inserted in two per-process
> lists. If we create new objects, how will we manage for user-space
> references (inherited accross fork) to remain valid ?
 The only way I see are process-private file descriptor tables +
 reference counters for the underlying objects. On fork, the descriptor
 table would be cloned and the reference counter of the contained object
 would be incremented, creating another reference to them. Or should we
 rather re-open those objects, creating another instance?
>>> That is essentially the two alternatives I propose.
>>>
>>> The problem when cloning the file descriptor table is that if there is
>>> an xnholder_t (or something similar) in a file descriptor object, the
>>> file descriptor can only be linked to one table.
>> Hmm, where is there difference between this cloning and "normal"
>> multi-threaded usage? The only difference I see is that there are now
>> two separated address spaces from the user perspective. But for the
>> kernel, it stays the same.
> 
> If there are two ppds, there are two lists (or hash table, or whatever
> data structure). So, we now have an object, with only one xnholder_t
> (or list_head) that must be in two lists. This does not work.

At least for RTDM, objects that are addressed via file descriptors are
not managed in ppd tables. Instead, the descriptor table already
contains enough information to find those objects on process
termination. At the moment, there is an owner field in the object
required to tell the ownerships apart. With process-private descriptor
tables this field would become obsolete.

> 
>>> The problem of re-opening the objects is that the user-space
>>> references to the re-opened object should be updated. It is impossible
>>> for a file descriptor.
>> The only user space reference is the file descriptor - an index. And as
>> this index stays the same across the fork, I don't see the problem.
> 
> The user-space file descriptor is __rtdm_fd_start + kernel-space file
> descriptor. If you re-open an object, you will obtain a new
> kernel-space file descriptor, and hence a different user-space file
> descriptor. So, no, the index will not stay the same across the fork.

Not with the current implementation, true. But as I said: the
prerequisite for fork-persistent file descriptors are process-private
descriptor tables anyway. And at that point, the indexes will stay the same.

Jan



signature.asc
Description: OpenPGP digital signature
___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] Auto closing of file descriptors and fork.

2007-12-27 Thread Gilles Chanteperdrix
On Dec 27, 2007 4:09 PM, Jan Kiszka <[EMAIL PROTECTED]> wrote:
>
> Gilles Chanteperdrix wrote:
> > On Dec 27, 2007 12:58 PM, Jan Kiszka <[EMAIL PROTECTED]> wrote:
> >> Gilles Chanteperdrix wrote:
> >>> Gilles Chanteperdrix wrote:
> >>>  > Hi,
> >>>  >
> >>>  > I have a problem with auto closing of file descriptors and fork. I
> >>>  > have an application (a modified pppd, to name it), which in a certain
> >>>  > mode (pppd "updetach" mode) opens some real-time file descriptors,
> >>>  > forks and exit the parent, continuing to use the file descriptors in
> >>>  > the child. The problem is that when exiting the parent, file
> >>>  > descriptors are automatically destroyed and therefore can not be used
> >>>  > in the child.
> >>>  >
> >>>  > Any ideas for a fix ?
> >>>
> >>> More precisely. We need to trap the "fork" event, and handle it in the
> >>> skins event callbacks. We will need to create a new ppd structure for
> >>> the new process, but what will we do with the skin objects ? If we keep
> >>> the same objects for the child and increment a reference count, we will
> >>> end up with an object that need to be inserted in two per-process
> >>> lists. If we create new objects, how will we manage for user-space
> >>> references (inherited accross fork) to remain valid ?
> >> The only way I see are process-private file descriptor tables +
> >> reference counters for the underlying objects. On fork, the descriptor
> >> table would be cloned and the reference counter of the contained object
> >> would be incremented, creating another reference to them. Or should we
> >> rather re-open those objects, creating another instance?
> >
> > That is essentially the two alternatives I propose.
> >
> > The problem when cloning the file descriptor table is that if there is
> > an xnholder_t (or something similar) in a file descriptor object, the
> > file descriptor can only be linked to one table.
>
> Hmm, where is there difference between this cloning and "normal"
> multi-threaded usage? The only difference I see is that there are now
> two separated address spaces from the user perspective. But for the
> kernel, it stays the same.

If there are two ppds, there are two lists (or hash table, or whatever
data structure). So, we now have an object, with only one xnholder_t
(or list_head) that must be in two lists. This does not work.

>
> >
> > The problem of re-opening the objects is that the user-space
> > references to the re-opened object should be updated. It is impossible
> > for a file descriptor.
>
> The only user space reference is the file descriptor - an index. And as
> this index stays the same across the fork, I don't see the problem.

The user-space file descriptor is __rtdm_fd_start + kernel-space file
descriptor. If you re-open an object, you will obtain a new
kernel-space file descriptor, and hence a different user-space file
descriptor. So, no, the index will not stay the same across the fork.

-- 
   Gilles Chanteperdrix

___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] Auto closing of file descriptors and fork.

2007-12-27 Thread Jan Kiszka
Gilles Chanteperdrix wrote:
> On Dec 27, 2007 12:58 PM, Jan Kiszka <[EMAIL PROTECTED]> wrote:
>> Gilles Chanteperdrix wrote:
>>> Gilles Chanteperdrix wrote:
>>>  > Hi,
>>>  >
>>>  > I have a problem with auto closing of file descriptors and fork. I
>>>  > have an application (a modified pppd, to name it), which in a certain
>>>  > mode (pppd "updetach" mode) opens some real-time file descriptors,
>>>  > forks and exit the parent, continuing to use the file descriptors in
>>>  > the child. The problem is that when exiting the parent, file
>>>  > descriptors are automatically destroyed and therefore can not be used
>>>  > in the child.
>>>  >
>>>  > Any ideas for a fix ?
>>>
>>> More precisely. We need to trap the "fork" event, and handle it in the
>>> skins event callbacks. We will need to create a new ppd structure for
>>> the new process, but what will we do with the skin objects ? If we keep
>>> the same objects for the child and increment a reference count, we will
>>> end up with an object that need to be inserted in two per-process
>>> lists. If we create new objects, how will we manage for user-space
>>> references (inherited accross fork) to remain valid ?
>> The only way I see are process-private file descriptor tables +
>> reference counters for the underlying objects. On fork, the descriptor
>> table would be cloned and the reference counter of the contained object
>> would be incremented, creating another reference to them. Or should we
>> rather re-open those objects, creating another instance?
> 
> That is essentially the two alternatives I propose.
> 
> The problem when cloning the file descriptor table is that if there is
> an xnholder_t (or something similar) in a file descriptor object, the
> file descriptor can only be linked to one table.

Hmm, where is there difference between this cloning and "normal"
multi-threaded usage? The only difference I see is that there are now
two separated address spaces from the user perspective. But for the
kernel, it stays the same.

> 
> The problem of re-opening the objects is that the user-space
> references to the re-opened object should be updated. It is impossible
> for a file descriptor.

The only user space reference is the file descriptor - an index. And as
this index stays the same across the fork, I don't see the problem.

Jan



signature.asc
Description: OpenPGP digital signature
___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] Auto closing of file descriptors and fork.

2007-12-27 Thread Gilles Chanteperdrix
On Dec 27, 2007 12:58 PM, Jan Kiszka <[EMAIL PROTECTED]> wrote:
>
> Gilles Chanteperdrix wrote:
> > Gilles Chanteperdrix wrote:
> >  > Hi,
> >  >
> >  > I have a problem with auto closing of file descriptors and fork. I
> >  > have an application (a modified pppd, to name it), which in a certain
> >  > mode (pppd "updetach" mode) opens some real-time file descriptors,
> >  > forks and exit the parent, continuing to use the file descriptors in
> >  > the child. The problem is that when exiting the parent, file
> >  > descriptors are automatically destroyed and therefore can not be used
> >  > in the child.
> >  >
> >  > Any ideas for a fix ?
> >
> > More precisely. We need to trap the "fork" event, and handle it in the
> > skins event callbacks. We will need to create a new ppd structure for
> > the new process, but what will we do with the skin objects ? If we keep
> > the same objects for the child and increment a reference count, we will
> > end up with an object that need to be inserted in two per-process
> > lists. If we create new objects, how will we manage for user-space
> > references (inherited accross fork) to remain valid ?
>
> The only way I see are process-private file descriptor tables +
> reference counters for the underlying objects. On fork, the descriptor
> table would be cloned and the reference counter of the contained object
> would be incremented, creating another reference to them. Or should we
> rather re-open those objects, creating another instance?

That is essentially the two alternatives I propose.

The problem when cloning the file descriptor table is that if there is
an xnholder_t (or something similar) in a file descriptor object, the
file descriptor can only be linked to one table.

The problem of re-opening the objects is that the user-space
references to the re-opened object should be updated. It is impossible
for a file descriptor.

-- 
   Gilles Chanteperdrix

___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] Auto closing of file descriptors and fork.

2007-12-27 Thread Jan Kiszka
Gilles Chanteperdrix wrote:
> Gilles Chanteperdrix wrote:
>  > Hi,
>  > 
>  > I have a problem with auto closing of file descriptors and fork. I
>  > have an application (a modified pppd, to name it), which in a certain
>  > mode (pppd "updetach" mode) opens some real-time file descriptors,
>  > forks and exit the parent, continuing to use the file descriptors in
>  > the child. The problem is that when exiting the parent, file
>  > descriptors are automatically destroyed and therefore can not be used
>  > in the child.
>  > 
>  > Any ideas for a fix ?
> 
> More precisely. We need to trap the "fork" event, and handle it in the
> skins event callbacks. We will need to create a new ppd structure for
> the new process, but what will we do with the skin objects ? If we keep
> the same objects for the child and increment a reference count, we will
> end up with an object that need to be inserted in two per-process
> lists. If we create new objects, how will we manage for user-space
> references (inherited accross fork) to remain valid ?

The only way I see are process-private file descriptor tables +
reference counters for the underlying objects. On fork, the descriptor
table would be cloned and the reference counter of the contained object
would be incremented, creating another reference to them. Or should we
rather re-open those objects, creating another instance?

BTW, by adding a fork hook, my old idea of storing the ppd reference in
some I-pipe ptdkey comes into reach again.

Jan



signature.asc
Description: OpenPGP digital signature
___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] Auto closing of file descriptors and fork.

2007-12-26 Thread Gilles Chanteperdrix
Gilles Chanteperdrix wrote:
 > Hi,
 > 
 > I have a problem with auto closing of file descriptors and fork. I
 > have an application (a modified pppd, to name it), which in a certain
 > mode (pppd "updetach" mode) opens some real-time file descriptors,
 > forks and exit the parent, continuing to use the file descriptors in
 > the child. The problem is that when exiting the parent, file
 > descriptors are automatically destroyed and therefore can not be used
 > in the child.
 > 
 > Any ideas for a fix ?

More precisely. We need to trap the "fork" event, and handle it in the
skins event callbacks. We will need to create a new ppd structure for
the new process, but what will we do with the skin objects ? If we keep
the same objects for the child and increment a reference count, we will
end up with an object that need to be inserted in two per-process
lists. If we create new objects, how will we manage for user-space
references (inherited accross fork) to remain valid ?

-- 


Gilles Chanteperdrix.

___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] Auto closing of file descriptors and fork.

2007-12-20 Thread Gilles Chanteperdrix
On Dec 20, 2007 4:13 PM, Daniel Schnell <[EMAIL PROTECTED]> wrote:
> Gilles Chanteperdrix wrote:
> > Hi,
> >
> > I have a problem with auto closing of file descriptors and fork. I
> > have an application (a modified pppd, to name it), which in a certain
> > mode (pppd "updetach" mode) opens some real-time file descriptors,
> > forks and exit the parent, continuing to use the file descriptors in
> > the child. The problem is that when exiting the parent, file
> > descriptors are automatically destroyed and therefore can not be used
> > in the child.
> >
> > Any ideas for a fix ?
>
> Maybe not exiting the child but saying waitpid() ?

The problem is that the aim of pppd updetach is to exit the parent
once the connection is established, so that the script running pppd
can continue.

-- 
   Gilles Chanteperdrix

___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] Auto closing of file descriptors and fork.

2007-12-20 Thread Daniel Schnell
Gilles Chanteperdrix wrote:
> Hi,
> 
> I have a problem with auto closing of file descriptors and fork. I
> have an application (a modified pppd, to name it), which in a certain
> mode (pppd "updetach" mode) opens some real-time file descriptors,
> forks and exit the parent, continuing to use the file descriptors in
> the child. The problem is that when exiting the parent, file
> descriptors are automatically destroyed and therefore can not be used
> in the child.  
> 
> Any ideas for a fix ?

Maybe not exiting the child but saying waitpid() ?



Daniel Schnell.

___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


[Xenomai-core] Auto closing of file descriptors and fork.

2007-12-20 Thread Gilles Chanteperdrix
Hi,

I have a problem with auto closing of file descriptors and fork. I
have an application (a modified pppd, to name it), which in a certain
mode (pppd "updetach" mode) opens some real-time file descriptors,
forks and exit the parent, continuing to use the file descriptors in
the child. The problem is that when exiting the parent, file
descriptors are automatically destroyed and therefore can not be used
in the child.

Any ideas for a fix ?

-- 
   Gilles Chanteperdrix

___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core