Patrick,
I'm unsure if I really understand your question. cpg_dispatch doesn't
check errno and doesn't do restart.
I believe what you want to achieve is alarm handler. Way how to do it,
is to use select/poll on cpg/(any other service) fd and call
cpg_dispatch only when fd is ready for read. Alarm handler can then set
variable which is checked after cpg_dispatch call. If you have only
cpg_dispatch, you even don't need poll, but can directly run endless
loop. so pseudocode fragment:
int want_exit_loop = 0;
sigalarm_handler() {
want_exit_loop = 1;
}
...
while (!want_exit_loop) {
cpg_dispatch();
}
...
If I didn't understood your question correctly, please try reformulate
it or even better, send code fragment.
Regards,
Honza
Patrick Hemmer napsal(a):
> So I'm trying to write an application which uses CPG but am having a
> problem with cleanly terminating the application.
>
> The issue is that when calling cpg_dispatch, if the process gets a
> signal while it's sitting on the `poll()` call, and there is a signal
> handler defined, upon return from the signal handler, errno is set to
> EINTR which causes cpg_dispatch to restart the call to qb_ipcc_event_recv.
> Basically nothing other than a SIGKILL (or a signal which has no handler
> and results in the default action of exit) can terminate the app. And
> aside from terminating, if you wanted to use a SIGALRM to break the
> poll() and go do other things, you can't.
>
> I'm using corosync 2.3.2 and libqb 0.14.4
>
> This assessment correct or am I missing something?
>
> -Patrick
>
>
>
> _______________________________________________
> discuss mailing list
> [email protected]
> http://lists.corosync.org/mailman/listinfo/discuss
>
_______________________________________________
discuss mailing list
[email protected]
http://lists.corosync.org/mailman/listinfo/discuss