Hello,

[ pipe.c.patch ]  update the "timeout" variable so that the remaining timeout is used in case of consequent xnsynch_sleep_on() calls.

As I understand that may indeed happen in case when another thread "steals" data while this one waits to be scheduled in.

[ timer.c.patch] xnticks_t is unsigned while (as I understand) "xntlholder_date(&timer->plink) - nkpod->jiffies" can be negative.
In this case, some positive big number is returned and any code that relies on xnthread_timeout() or xntimer_get_timeout() and runs over periodic mode won't work properly (e.g. xnsynch_sleep_on() and xnpipe_recv() now). Not sure 1 should be returned in this case (so far I just did it the same way as xntimer_get_timeout_aperiodic()), I guess 0 would be better in both cases.

At least in theory, 1 may cause an (even) infinite loop in xnpipe_recv() as I don't like a check for "timeout > 1" to be placed there. It's something that should be decided at the timer layer - I mean, whether it's too late to sleep or not.

hope, I haven't overlooked anything this time :o)


--
Best regards,
Dmitry Adamushko

--- pipe-SVN.c	2006-08-20 15:04:25.000000000 +0200
+++ pipe.c	2006-08-20 21:29:55.000000000 +0200
@@ -450,6 +450,9 @@ ssize_t xnpipe_recv(int minor, struct xn
 			ret = -EIDRM;
 			goto unlock_and_exit;
 		}
+
+		/* remaining timeout */		
+		timeout = xnthread_timeout(thread);
 	}
 
 	*pmh = link2mh(holder);
--- timer-SVN.c	2006-08-20 15:50:18.000000000 +0200
+++ timer.c	2006-08-20 15:54:30.000000000 +0200
@@ -313,7 +313,12 @@ static xnticks_t xntimer_get_date_period
 
 static xnticks_t xntimer_get_timeout_periodic(xntimer_t *timer)
 {
-	return xntlholder_date(&timer->plink) - nkpod->jiffies;
+	xnticks_t now = nkpod->jiffies;
+	
+	if (xntlholder_date(&timer->plink) < now)
+		return 1;	/* Will elapse shortly. */
+	
+	return xntlholder_date(&timer->plink) - now;
 }
 
 static xnticks_t xntimer_get_raw_expiry_periodic(xntimer_t *timer)
_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to