This is the mail archive of the mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: longjmp problem


Vadim Egorov wrote:
> There are some considerations concerning this problem.
> First, is the way of stack unwinding. We can simply reinstall last
> registered SEH frame that is on stack dismissing frames that was
> registered later. The appropriate frame can be stored in jmp_buf as
> MS do but I don't think it's a good idea to increase jmp_buf size.

Isn't jmp_buf currently too big? Its size is 208 bytes and only 44 seems to be
used by setjmp. I don't understand why the structure is so big (Maybe _JBTYPE
macro should be defined as char?).

> For better interoperability with alien code that may use SEH it is
> necessary to call each of these handlers for unwinding so that they
> could perform cleanup.
> It seems possible to do it in MS like way described by Petrek but
> it will impose some performance overhead on longjmp and on C++
> exception handling accordingly.
> But the problem with signal state still remains - it doesn't get
> unblocked. If longjmp will perform more or less SEH frame unwinding
> the same SEH technique can be here - to install additional exception
> handler while signal handler is being called which would restore
> signal state if unwinding occurred - but it doesn't look like the best
> solution.

We could use the same (too?) simple solution as SUN. setjmp and longjmp become
_setjmp and _longjmp, sigsetjmp and siglongjmp call _setjmp and _longjmp, and
setjmp and longjmp call sigsetjmp and siglongjmp using the current signal mask
as parameter for sigsetjmp. Obviously, jmp_buf and sigjmp_buf must be the same
data type.

> Vadim.
> --
> *********************************************
> Vadim Egorov, 1C      *       Вадим Егоров,1C
>         *
> *********************************************

Thanks for your time.

Pascal Vittone

____________________________________________________\              /_______
Pascal Vittone		ESD/EBU/LSD/R&D	Alcatel Business Systems
Tel: +33 (0)1 55 66 56 77			   54, av. Jean Jaures
Fax: +33 (0)1 55 66 54 24			     F-92700 Colombes
_________________________________________________________\    /____________
                                                          \  /

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]