On Tue, Dec 23, 2014 at 05:58:42PM +0100, Huy Cong Vu wrote:
>
>
> ----- Mail original -----
> > De: "Gilles Chanteperdrix" <[email protected]>
> > À: "Huy Cong Vu" <[email protected]>
> > Cc: [email protected]
> > Envoyé: Mardi 23 Décembre 2014 17:46:59
> > Objet: Re: [Xenomai] Differents switch mode from differents Xenomai skin
>
> > On Tue, Dec 23, 2014 at 05:43:41PM +0100, Huy Cong Vu wrote:
> >>
> >>
> >> ----- Mail original -----
> >> > De: "Gilles Chanteperdrix" <[email protected]>
> >> > À: "Huy Cong Vu" <[email protected]>
> >> > Cc: [email protected]
> >> > Envoyé: Mardi 23 Décembre 2014 17:35:35
> >> > Objet: Re: [Xenomai] Differents switch mode from differents Xenomai skin
> >>
> >> > On Tue, Dec 23, 2014 at 05:23:07PM +0100, Huy Cong Vu wrote:
> >> >> void mini( void *ptr )
> >> >> {
> >> >>
> >> >>
> >> >> uint8_t b;
> >> >> int ret1;
> >> >> int idx;
> >> >>
> >> >> pthread_set_mode_np(0, PTHREAD_WARNSW);
> >> >> printf("Starting posix test\n");
> >> >>
> >> >> ec_port = malloc(sizeof(ecx_portt*));
> >> >>
> >> >> if (setup_nic(ec_port,"rteth0") > 0) {
> >> >> idx = getindex (ec_port);
> >> >> /* setup datagram */
> >> >> b = 0x0000;
> >> >> setupdatagram (ec_port, &(ec_port->txbuf[idx]),0x0009,
> >> >> idx, 0x0000, 0x0103,
> >> >> sizeof(b), &b );
> >> >> /* send data and wait for answer */
> >> >> wkc = srconfirm (ec_port, idx, EC_TIMEOUTRET3);
> >> >> }
> >> >>
> >> >> }
> >> >
> >> > Typically, as I already explained, what you do here is wrong: you
> >> > should not arm the PTHREAD_WARNSW bit before call such as malloc or
> >> > the calls in setup_nic, which switch to secondary mode.
> >>
> >> Ok, should I call it laterly? It is just for detect mode switch
> >> reason in fact
> >
> > How to use PTHREAD_WARNSW is thoroughly documented, see:
> > https://xenomai.org/2014/06/finding-spurious-relaxes/
> >
>
> So perhaps I was misunderstanding this statement?
> Then, you need to enable the warn_upon_switch capability on a per-thread
> basis. For instance, a POSIX-based application would run this code from the
> thread to monitor for spurious relaxes:
>
> /* Ask Xenomai to warn us upon switches to secondary mode. */
> pthread_set_mode_np(0, PTHREAD_WARNSW);
>
> Does that means that I must put the line into the thread with function calls
> that cause mode switch?
> I thought it means that I have to put the line in the threads of my program
> (in my case mini() ).
Enabling this bit, causes every switch to secondary mode of the
thread where you enabled it to send a signal to that thread. I do
not understand what is so hard to understand about this.
--
Gilles.
_______________________________________________
Xenomai mailing list
[email protected]
http://www.xenomai.org/mailman/listinfo/xenomai