Leopold Toetsch <[EMAIL PROTECTED]> wrote:
> The event handler thread is waiting on a condition, so the only
> possibility seems to be the latter option, that is run another thread
> that does nothing but sigwait(3).
While pressing $send_button I realized, that there is another option and
- of course - we'll have to handle IO events too.
So my local src/events.c does:
1) block all signals before any thread creation
2) install an event handler for SIGINT
3) start the event handler thread
4) start an IO handler thread, which does:
- unblock SIGINT
- select in a while loop
- if select returns -1, check for EINTR and the sig_atomic_t flag
set by the signal handler
This works fine. Pressing ^C (and ^\ to quit) in sl.pasm now prints
diagnostics for testing:
started
sig_handler SIGINT in pid 2535
select EINTR
int arrived
Quit
$ cat sl.pasm
print "started\n"
sleep 1000
end
The IO thread can then generate a SIGINT_EVENT and pthread_signal the
event thread. And it could wait on various file-handles and on an
internal pipe, which can be used to communicate file-handles to be
waited on to the IO thread.
Comments welcome,
leo