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: How to know if scheduler has started?



On 31/10/13 16:24, Grant Edwards wrote:
> This question has come up many times in the past 10-12 years, but I've
> never seen a real answer:
> 
> How do you tell if the scheduler has been started?
> 
> Specifically, how do you know when it's safe to attempt to lock a mutex?
> 
> Several people have suggested this snippet:
> 
>  scheduler_running = cyg_thread_self() != cyg_thread_idle_thread();
> 
> That seems to work when called from cyg_user_start() and from normal
> threads, but it doesn't work when called from initialization code in 
> a device driver.
> 
> So, I'll ask again:
> 
> how does one write code that knows to lock/unlock a mutex when called
> from a normal user thread but not attempt the lock/unlock whcn called
> from initialization code in cyg_user_start() or a device driver?
> 
> The function does not get called from ISR/DSR contexts: it is only
> called during initialization (before the scheduler is started) and
> from normal user threads.
> 
> OTOH, are you are allowed to lock/unlock mutexes from initialization
> code?  Maybe I'm misremembering, but I thought that was forbidden?
> 

You are allowed to lock/unlock a mutex during initialization. That is
why the idle thread is set current throughout the init code, and why the
trick you mention above will work.

Obviously you need to avoid anything that might cause a thread to sleep,
and to leave any mutexes unlocked when you return.



-- 
Nick Garnett                                         Kernel Architect
eCosCentric Limited    http://www.eCosCentric.com    The eCos experts
Barnwell House, Barnwell Drive, Cambridge, UK.   Tel: +44 1223 245571
Registered in England and Wales:                      Reg No: 4422071

-- 
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]