This is the mail archive of the
ecos-discuss@sources.redhat.com
mailing list for the eCos project.
Re: ECOS: fatal error!
- From: Iztok Zupet <iz at vsr dot si>
- To: zhlg_shuhan <zhlg_shuhan at sina dot com>,ecos-discuss at sources dot redhat dot com
- Date: Wed, 26 Jun 2002 12:02:10 +0200
- Subject: Re: [ECOS] ECOS: fatal error!
- Organization: VSR d.o.o.
- References: <20020626091224.13958.qmail@sina.com>
- Reply-to: iz at vsr dot si
On Wednesday 26 June 2002 11:12, zhlg_shuhan wrote:
> Hi,everyone!
> as you know,scheduler::lock()/unlock() can't settle down race
> conditions for mutithread accessing scheduler's data structure,such as
> threadQueue. for example, current thread was accessing thread
> queue(add_thread_to_list())with lock() taking when a interrup occurs,this
> interrupt also accessing threadqueue,so race condition for thread queue
> occurs,because lock(0/unlock()simply do "schedLock++/--",it can't resolve
> this BIG problem!
> Right?
>
> zhlg
> ______________________________________
>
> ===================================================================
> 新浪免费电子邮箱 (http://mail.sina.com.cn)
> 新浪分类信息:二手市场走一走,该出手时就出手!
> (http://classad.sina.com.cn/2shou/)
Hi
I think, that You just can't access the scheduler queue from an interrupt
(ISR) routine! No way. What you need to do is to write a DSR for Your ISR and
in that DSR You can only set up a driver condition to notify a normal thread
waiting for it, which can access the scheduler queue after the condition
becomes true.
Only a normal thread can access the scheduler queue, if You want to be safe,
not the ISR (interrupt service routine) or DSR (deferred service routine).
Regards
iz
--
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss