On Thu, 2011-06-09 at 15:34 +0200, Wolfgang Grandegger wrote: > Hi Philippe, > > On 06/09/2011 03:05 PM, Philippe Gerum wrote: > > On Thu, 2011-06-09 at 14:42 +0200, Wolfgang Grandegger wrote: > >> Hello, > >> > >> I just realized a problem with synchronous message passing support. When > >> rt_task_send() send times out, I get the oops below from line: > >> > > > > Does this help? > > > > diff --git a/ksrc/skins/native/task.c b/ksrc/skins/native/task.c > > index b822fd0..b0e99a7 100644 > > --- a/ksrc/skins/native/task.c > > +++ b/ksrc/skins/native/task.c > > @@ -1988,21 +1988,28 @@ int rt_task_receive(RT_TASK_MCB *mcb_r, RTIME > > timeout) > > } > > > > /* > > - * Wait on our receive slot for some client to enqueue itself > > - * in our send queue. > > + * We loop to care for spurious wakeups, in case the > > + * client times out before we unblock. > > */ > > - info = xnsynch_sleep_on(&server->mrecv, timeout, XN_RELATIVE); > > - /* > > - * XNRMID cannot happen, since well, the current task would be the > > - * deleted object, so... > > - */ > > - if (info & XNTIMEO) { > > - err = -ETIMEDOUT; /* Timeout. */ > > - goto unlock_and_exit; > > - } else if (info & XNBREAK) { > > - err = -EINTR; /* Unblocked. */ > > - goto unlock_and_exit; > > - } > > + do { > > + /* > > + * Wait on our receive slot for some client to enqueue > > + * itself in our send queue. > > + */ > > + info = xnsynch_sleep_on(&server->mrecv, timeout, XN_RELATIVE); > > + /* > > + * XNRMID cannot happen, since well, the current task > > + * would be the deleted object, so... > > + */ > > + if (info & XNTIMEO) { > > + err = -ETIMEDOUT; /* Timeout. */ > > + goto unlock_and_exit; > > + } > > + if (info & XNBREAK) { > > + err = -EINTR; /* Unblocked. */ > > + goto unlock_and_exit; > > + } > > + } while (!xnsynch_pended_p(&server->mrecv)); > > > > holder = getheadpq(xnsynch_wait_queue(&server->msendq)); > > /* There must be a valid holder since we waited for it. */ > > Yes, it does help: > > -bash-3.2# ./oops_sender > pre-rt_task_receive() > rt_task_send() failed: -110 (Connection timed out) > Killing child > > No more oops, thanks for your quick help.
Ok, thanks for reporting. Patch queued. > > Wolfgang. > > -- Philippe. _______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core