On 4/17/2013 3:52 PM, José Orlando Pereira wrote:
> The large stack size in cpg_dispatch, resulting from the
> message buffer, is causing a segmentation fault in environments
> with a constrained stack size, namely, when calling into
> cpg_dispatch from Java using JNI (i.e. for
> http://github.com/jopereira/jgcs/tree/master/jgcs-corosync).
> ---
> lib/cpg.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/lib/cpg.c b/lib/cpg.c
> index b96df4e..f3b2bff 100644
> --- a/lib/cpg.c
> +++ b/lib/cpg.c
> @@ -346,7 +346,7 @@ cs_error_t cpg_dispatch (
> struct cpg_ring_id ring_id;
> uint32_t totem_member_list[CPG_MEMBERS_MAX];
> int32_t errno_res;
> - char dispatch_buf[IPC_DISPATCH_SIZE];
> + char* dispatch_buf;
style: char *dispatch_buf = NULL;
>
> error = hdb_error_to_cs (hdb_handle_get (&cpg_handle_t_db, handle,
> (void *)&cpg_inst));
> if (error != CS_OK) {
> @@ -361,6 +361,7 @@ cs_error_t cpg_dispatch (
> timeout = 0;
> }
>
> + dispatch_buf = malloc(IPC_DISPATCH_SIZE);
if (dispatch_buf == NULL) {
.... return appropriate error ....
}
> dispatch_data = (struct qb_ipc_response_header *)dispatch_buf;
> do {
> errno_res = qb_ipcc_event_recv (
> @@ -504,6 +505,7 @@ cs_error_t cpg_dispatch (
>
> error_put:
> hdb_handle_put (&cpg_handle_t_db, handle);
> + free(dispatch_buf);
> return (error);
> }
and you will need to repeat this patch for all libraries.
Fabio
_______________________________________________
discuss mailing list
[email protected]
http://lists.corosync.org/mailman/listinfo/discuss