[EMAIL PROTECTED] wrote:
> 
> Hello,
> 
> I've found a nicely "undocumented feature", in the semaphore package. I discovered 
>that when you initialise a semaphore with a zero count. Although everything seems to 
>wors fine. this means any process that do a rt_sem_wait actually wait until another 
>task
> make a rt_sem_signal, you have a  segmentation fault when you delete such a 
>semaphore .

Usual procedure used to wake up tasks on external timers, it allows to
check overruns, but never noticed that problem. We'll look at it, thank.
 
> Even trickier, if I initialise the semaphore with a 1 value and the line after in 
>the code (init_module) I perform a rt_sem_wait in order to reset the count to 0, this 
>"new" semaphore can be deleted safely (Actually I use it as a workaround but I don't
> dare show it to the QA department   ;-).
> 
> I had a quick look at the rt_sem_delete function and I see that the only indirect 
>memory access(which is likely to trigger the segmentation fault)  was the assignment 
>in the while loop :
> 
>                 (q->task)->state &= ~(SEMAPHORE | DELAYED);
> 
> I do suspect that the q->task can be a NULL pointer (after all It's initialised to 
>0).
> 
> The  problem is that I cannot understand why the task filed could be something like  
>a NULL pointer
> when I initialise to 0  and not a null pointer if I initialise to 1 .

This can be a clue.
 
> I also have another side question, you can compile the scheduler using priority 
>order for waiting on the semaphore
> or the FIFO method. My question is, if I choose the priority order and two waiting 
>task have the same priority, can I
> assume that these two tasks will be always ordered together in a FIFO order (since 
>they have the same priority) ?

YES.

Ciao, Paolo.
-- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
---
For more information on Real-Time Linux see:
http://www.rtlinux.org/rtlinux/

Reply via email to