Re: Interrupted by signal 11 SIGSEGV using a nested function to handle errors

silvioprog <[email protected]> Sat, 21 Jan 2017 11:40:52 -0300
Newsgroups gmane.text.xml.xmlsec
Message-ID <CAKq_V2JqKyEfZ-pHRqF7gZ_3TQqs4nPbX9yPLrOzKd0oTCO1zw@mail.gmail.com>
Hello Michel, thanks for replying.

I'm using `cdecl`. :-)

The problem was related to C nested function: its life-cycle is strictly
limited to the scope caller. Something like this:

some_global_function_using_a_nested_callback_function() {
    some_nested_callback_function() { // << its life-cycle dies ...
    }
    some_callback_register(&some_nested_callback_function);
} // ... here! x-(

After declaring this code above, if you call
`some_global_function_using_a_nested_callback_function()` in any place, you
may get a terrible SIGSEGV. :-)

I declared it as nested function because I need to access the
`some_global_function_using_a_nested_callback_function()`'s parameters, so
finally I solved the problem just declaring an extra struct::

struct some_callback_handler {
  my_particular_callback;
  my_particular_callback_cls;
}

static some_global_callback_function(some_callback_handler) { // << at
last, its life-cycle is global! ^.^

some_callback_handler.my_particular_callback(some_callback_handler.my_particular_callback_cls);
}

some_global_function_using_a_global_callback_function(the_xmlsec_callback) {

some_xmlsec_callback_register(global_handler, &some_global_callback_function);
}

https://www.aleksey.com/pipermail/xmlsec/2017/010098.html

Final implementation (without nested funcs):
https://github.com/silvioprog/ws/blob/master/libmicroxml/src/microxml.c#L126
.

I need to take care with nested functions in C, I think I'll never use it
anymore. -.-

Thanks!

(I sent the last message to the Aleksey's e-mail by mistake hehe ^^' )

On Fri, Jan 20, 2017 at 5:25 PM, iso8583 <[email protected]> wrote:

> HI,
>
>
>
> > I can't understand why it doesn't work. It seems my local function has
> the same signature of `xmlGenericErrorFunc` function, but... :-(
>
>
>
> As you mentioned you are working in Pascal, it may not be just because of
> the signature of the function.
>
> Is it not actually a ‘calling convention’ problem ?
>
> https://en.wikipedia.org/wiki/X86_calling_conventions
>
>
>
> Hope it helps,
>
>
>
> Regards,
>
>
>
> Michel.
>

-- 
Silvio Clécio

_______________________________________________
xmlsec mailing list
[email protected]
http://www.aleksey.com/mailman/listinfo/xmlsec