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]

RE: POSIX timer_create


Nick,

Thanks for your reply. 

We are operating a process control environment where we have a number of
threads which are operating as finite state machines. These threads take in
requests through a mailbox, process them and sometimes wait for a response
from another application either on-board or off-board. In the meantime these
threads must be available to handle additional real-time requests.
Typically, when we get a request that requires a response we will start a
fail-safe timer. Either we get the response or a timeout. It is this timer
that I am trying to implement. 

The problem with signals is that the thread must wait for the signal and the
thread becomes blocked.

The IEEE specifications has a member of the sigevent structure defined as
"void(*)(unsigned sigval) sigev_notify_function Notification function". This
is the option I had hoped to use.

I don't see any way to use the POSIX timers. If we were use the eCos Alarms
what kind of problems would we be facing? The threads will be created using
the eCos functions as the POSIX thread functions don't allow us some of the
functionality we need.

Hans
 

-----Original Message-----
From: nickg@xl5.calivar.com [mailto:nickg@xl5.calivar.com] On Behalf Of Nick
Garnett
Sent: Tuesday, September 14, 2004 6:00 AM
To: Devaughn, Hans
Cc: 'ecos-discuss@ecos.sourceware.org'
Subject: Re: [ECOS] POSIX timer_create


"Devaughn, Hans" <hans.devaughn@siemens.com> writes:

> The POSIX function timer_create has a parameter (struct sigevent *evp) 
> which allows a "user event handler".
> 
> The POSIX module, time.cxx, handles a timeout of the a timer in 
> function alarm_action. This function checks for SIGEV_SIGNAL and 
> SIGEV_THREAD. The latter, SIGEV_THREAD, has a comment "FIXME: 
> implement SIGEV_THREAD".
> 
> I am assuming the SIGEV_THREAD is the option for the user event 
> handler.

SIGEV_THREAD means "Create a new thread and call the notify function on it".
This is expensive, complicated and full of potential pitfalls, so we have
not implemented it.

Where does this reference to a "user event handler" come from? As far as I
am aware, POSIX only defines the SIGEV_SIGNAL and SIGEV_THREAD events.

> 
> My question - Has anyone implemented this POSIX feature? If not, is 
> there any other way to do this other than using eCos alarms?

As far as POSIX timers are concerned, delivering a signal is the only
mechanism currently supported. Why is that no suitable? Mixing POSIX and
non-POSIX features can be dangerous.


-- 
Nick Garnett                    eCos Kernel Architect
http://www.ecoscentric.com/     The eCos and RedBoot experts

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