This is the mail archive of the ecos-discuss@sources.redhat.com 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]

AW: AW: Blocking restricted in DSRs


...
> > Ok, the docu says sending signals to condition variables is ok from
> > a DSR. But AFAIK this has always be done together with locking the
> > associated mutex first... from the DSR then. But the docu also says
> > using cyg_mutex_lock() should be used only from thread context, not
> > from DSR. So, what's the right way then ?
> 
> It also says that cyg_mutex_signal() can be called without locking the
> associated mutex first. This is how it must be used from the DSR.

Ok, and what to do with the variables which are modified and which should be protected by the mutex ?
E.g. if I have a queue which is filled by the DSR, and which is checked by the thread which waits for the signal. Actually I have to ensure that the "take element out of queue" by the thread is protected against the "put element into queue" by the DSR.
Do I have to use cyg_scheduler_lock() in the thread to achieve this ?

The code with mutex looks like this:

cyg_mutex_lock(mutex);
while (queue.isEmpty())
   cyg_cond_wait(condition);
Item* i=queue.pop();
cyg_mutex_unlock(mutex);

DSR will be:

Item i;
queue.append(&i);
cyg_cond_signal(condition);

So how do I "translate" this correctly to use cyg_sched_lock() ?


Bye
Alex

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