On Monday 10 January 2011 21:22:41 Gilles Chanteperdrix wrote:
> Peter Soetens wrote:
> > On Monday 10 January 2011 19:25:48 Gilles Chanteperdrix wrote:
> >> Peter Soetens wrote:
> >>> On Monday 10 January 2011 17:24:28 Gilles Chanteperdrix wrote:
> >>>> Peter Soetens wrote:
> >>>>> Hi,
> >>>>> 
> >>>>> A while ago, I was advised to call xeno_sigshadow_install() after a
> >>>>> library installed a sigwinch signal handler (I believe this was
> >>>>> Xenomai 2.5.1). Could it be that this is no longer supported in
> >>>>> recent versions ? What is the correct way to avoid a segfault if an
> >>>>> application installed a sigwinch handler after Xenomai did ?
> >>>> 
> >>>> I think we already answered that at the time, but if you install your
> >>>> own sigwinch handler, you should:
> >>>> - register it with the SA_SIGINFO flag
> >>>> - call xeno_sigwinch_handler and consider that the signal is for the
> >>>> application only if this function returns 0.
> >>> 
> >>> This is indeed in the API docs, but it's not an option since it's a
> >>> third party library (readline) doing this, it doesn't depend on or
> >>> know Xenomai.
> >> 
> >> Actually, readline behaviour is highly configurable, and looking a bit
> >> at its documentation, we find that its behaviour with regard to sigwinch
> >> is configurable, see:
> >> rl_catch_sigwinch
> >> rl_resize_terminal
> > 
> > But we *want* to catch sigwinch/resize_terminal, since this happens quite
> > often. Without this signal the terminal width is not being communicated
> > to the readline library and it displays its columns in a too large or
> > too small width.
> > 
> > It's the terminal emulator giving us this signal, and it is meaningful to
> > us. It's Xenomai doing something fundamentally flawed, or I
> > fundamentally misunderstand it.
> 
> Look at the documentation of rl_catch_sigwinch, rl_resize_terminal, they
> have been made precisely, for your use-case. rl_catch_sigwinch will get
> readline not to catch the signal.
> 
> Then you will register a signal handler for your application, which
> calls, xeno_sigwinch_handler, and if that returns zero, calls
> rl_resize_terminal.
> 
> > Why can't you register a signal handler, without interfering
> > with other handlers for the same signal ?
> 
> Well, signal handlers are a per-process global ressource, look at
> sigaction documentation, this API is done this way, this is not
> Xenomai's fault, not even Linux' fault, you are barking at the wrong
> tree. That is precisely the reason why readline gives you access to
> rl_catch_sigwinch, rl_resize_terminal, and Xenomai to
> xeno_sigwinch_handler.

I see. I'll give it another shot.

Peter


_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to