Hi,

one more comment on this issue:
Regarding to the API documentation it is not required to use a static allocated
string for the name parameter
(API docu: "When non-NULL and non-empty, this string is copied to a safe place 
into the descriptor").

However, when I use a name variable that is created on the stack (using 
sprintf), I see
that the /proc/xenomai/registry/native/interrupts/xxx  name is fine, however 
the name in 
/proc/xenomai/irq is not valid.
I.e. I have to use a static name variable to pass to rt_inter_create() as the 
name pointer
seems to be used without a copy action in /proc/xenomai/irq.


Regards

Mathias
> > Hi,
> > 
> > I suppose, one more thing was missed. intr_reg.patch is to address it.
> > 
> > intr_swap.patch - to be safe with xnintr_t::name in all cases. In
> > particular, the reported crash should disappear without other
> > additional patches.
> > 
> > 
> > 
> > ------------------------------------------------------------------------
> > 
> > --- ./ksrc/skins/native/intr.c      2006-06-15 14:15:44.000000000 +0200
> > +++ ./ksrc/skins/native/intr-new.c  2007-01-10 14:45:26.320565000 +0100
> > @@ -223,6 +223,7 @@ static xnpnode_t __intr_pnode = {
> >   *
> >   * - Kernel module initialization/cleanup code
> >   * - Kernel-based task
> > + * - User-space task
> >   *
> >   * Rescheduling: possible.
> >   *
> > @@ -262,11 +263,21 @@ int rt_intr_create(RT_INTR *intr,
> >     /* <!> Since xnregister_enter() may reschedule, only register
> >        complete objects, so that the registry cannot return handles to
> >        half-baked objects... */
> > +   if (!err && name) {
> > +           xnpnode_t *pnode = &__intr_pnode;
> >  
> > -   if (!err)
> > -           err =
> > -               xnregistry_enter(intr->name, intr, &intr->handle,
> > -                                &__intr_pnode);
> > +           if (!*name) {
> > +                   /* Since this is an anonymous object (empty name on 
> > entry)
> 
> Isn't a NULL name representing an anonymous object as well?
> 
> > +                    * from user-space, it gets registered under an unique
> > +                    * internal name but is not exported through /proc. */
> > +                   xnobject_create_name(intr->name, sizeof(intr->name),
> > +                           (void *)intr);
> > +                   pnode = NULL;
> > +           }
> > +
> > +           err = xnregistry_enter(intr->name, intr, &intr->handle, pnode);
> > +   }       
> > +   
> >  #endif /* CONFIG_XENO_OPT_REGISTRY */
> >  
> >     if (err)
> > 
> > 
> > ------------------------------------------------------------------------
> > 
> > --- ./ksrc/skins/native/intr-new.c  2007-01-10 14:45:26.320565000 +0100
> > +++ ./ksrc/skins/native/intr-new2.c 2007-01-10 14:46:08.319442000 +0100
> > @@ -242,8 +242,8 @@ int rt_intr_create(RT_INTR *intr,
> >     if (xnpod_asynch_p())
> >             return -EPERM;
> >  
> > -   xnintr_init(&intr->intr_base, name, irq, isr, iack, mode);
> >     xnobject_copy_name(intr->name, name);
> > +   xnintr_init(&intr->intr_base, intr->name, irq, isr, iack, mode);
> 
> This will set xnintr_t::name to "" if name is NULL - intentionally?
> 
> Jan
> 
> 

-- 
Mathias Koehrer
[EMAIL PROTECTED]


Viel oder wenig? Schnell oder langsam? Unbegrenzt surfen + telefonieren
ohne Zeit- und Volumenbegrenzung? DAS TOP ANGEBOT JETZT bei Arcor: günstig
und schnell mit DSL - das All-Inclusive-Paket für clevere Doppel-Sparer,
nur  44,85 €  inkl. DSL- und ISDN-Grundgebühr!
http://www.arcor.de/rd/emf-dsl-2

_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to