On 19/06/07, Jan Kiszka <[EMAIL PROTECTED]> wrote:
[EMAIL PROTECTED] wrote:
> Hi,
> running a simple test application which spawns a periodic task writing on a
> serial interface
> the system hangs performing the rt_dev_close.
> The test program ran fine with xeno 2.2.6 with "Shared Interrupts" enabled,
> so as with
> xeno 2.3.1 with "Shared Interrupts" disabled. It fails with xeno 2.3.1 with
> "Shared Interrupts" enabled, so the problem seems to be in the shared
> interrupts handling area.
> kernel is 2.6.20 adeos patched
>
> Any suggestion?

Does the fix below eliminate the problem?

The problem (allegedly) is cause by the following reinitialization at
the end of the loop:

...
               if (!(intr = intr->next))
                       intr = shirq->handlers;
...

'end' may point to some of the elements ... and shirq->handlers may
become NULL (all elements have been deleted)..

(white-space damaged version.. enclosed a normal one)

--- ksrc/nucleus/intr.c-orig    2007-06-19 13:44:55.090623404 +0200
+++ ksrc/nucleus/intr.c 2007-06-19 13:45:53.867440067 +0200
@@ -273,7 +273,7 @@ static void xnintr_edge_shirq_handler(un
       xnintr_shirq_lock(shirq);
       intr = shirq->handlers;

-       while (intr != end) {
+       while (intr && intr != end) {
               int ret, code;

               xnstat_runtime_switch(sched,


--
Best regards,
Dmitry Adamushko
--- ksrc/nucleus/intr.c-orig	2007-06-19 13:44:55.090623404 +0200
+++ ksrc/nucleus/intr.c	2007-06-19 13:45:53.867440067 +0200
@@ -273,7 +273,7 @@ static void xnintr_edge_shirq_handler(un
 	xnintr_shirq_lock(shirq);
 	intr = shirq->handlers;
 
-	while (intr != end) {
+	while (intr && intr != end) {
 		int ret, code;
 
 		xnstat_runtime_switch(sched,
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to