This is the mail archive of the ecos-discuss@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Question about cyg_flag_timed_wait()


On 2010-01-02, Bart Veer <bartv@ecoscentric.com> wrote:

>    Grant> This "problem" seems to have come up again. I've looked at
>    Grant> the event flag code, and I can't see how there could be a
>    Grant> delay when waking a thread using cyg_thread_setbits() and
>    Grant> not when waking a thread using cyg_thread_release().
>
>    Grant> Both cases just end up calling the target thread's wake()
>    Grant> method. The only difference is that cyg_thread_release()
>    Grant> calls wake() unconditionally, and cyg_thread_setbits() only
>    Grant> calls it if the target thread is in the flag's waitqueue.
>
>    Grant> I'm not wrong am I?
>
> I have taken a look at this, and tried to reproduce it with a
> simple testcase. I am afraid I cannot reproduce the problem:
> the cyg_flag_timed_wait() always succeeds as soon as the flag
> is set. I have also taken a look at the kernel code and can
> see no reason for the reported behaviour.

I agree: I can't see any case where there would be any sort of
delay in the task being scheduled (assuming it would have
priority). 

> The most obvious explanation is that it is a problem with
> thread priorities. The cyg_flag_timed_wait() call may succeed
> as soon as the flag is set, but the thread won't actually be
> resumed immediately if there are higher-priority runnable
> threads, or if there is another thread with the same priority
> which still has part of its timeslice to run. For the latter
> scenario you would see something similar to what you describe:
> some number of system clock ticks after the flag is set the
> current thread's timeslice would expire, the other thread
> would be resumed, and only then would the
> cyg_flag_timed_wait() appear to return.
>
> I would need a testcase before investigating any further.

Thanks for looking at it -- I'm convinced that if there is a
delay in the task being scheduled it's an application code
issue with priorities.

-- 
Grant


-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]