diff --git a/exec/evil.c b/exec/evil.c index d2e99307..43986ebb 100644 --- a/exec/evil.c +++ b/exec/evil.c @@ -76,7 +76,10 @@ #include "sync.h" #include "evil.h" -static void clm_sync_init (void); +static void clm_sync_init ( + const unsigned int *member_list, + size_t member_list_entries, + const struct memb_ring_id *ring_id); static int clm_sync_process (void); @@ -98,7 +101,10 @@ static struct sync_callbacks clm_sync_operations = { static struct corosync_api_v1 *api = NULL; -static void sync_dummy_init (void) +static void sync_dummy_init ( + const unsigned int *member_list, + size_t member_list_entries, + const struct memb_ring_id *ring_id) { } @@ -329,7 +335,10 @@ static int clm_nodejoin_send (void) /* * This is a noop for this service */ -static void clm_sync_init (void) +static void clm_sync_init ( + const unsigned int *member_list, + size_t member_list_entries, + const struct memb_ring_id *ring_id) { return; } diff --git a/exec/sync.c b/exec/sync.c index 805badbf..6b086d68 100644 --- a/exec/sync.c +++ b/exec/sync.c @@ -78,7 +78,7 @@ static struct sync_callbacks sync_callbacks; static int sync_processing = 0; static void (*sync_next_start) ( - unsigned int *member_list, + const unsigned int *member_list, size_t member_list_entries, const struct memb_ring_id *ring_id); @@ -176,7 +176,7 @@ static void sync_start_init (const struct memb_ring_id *ring_id) static void sync_service_init (struct memb_ring_id *ring_id) { - sync_callbacks.sync_init (); + sync_callbacks.sync_init (my_member_list, my_member_list_entries, ring_id); totempg_callback_token_destroy (&sync_callback_token_handle); /* @@ -264,7 +264,7 @@ int sync_register ( struct sync_callbacks *callbacks), void (*next_start) ( - unsigned int *member_list, + const unsigned int *member_list, size_t member_list_entries, const struct memb_ring_id *ring_id)) { diff --git a/exec/sync.h b/exec/sync.h index c57b8694..78c4ab67 100644 --- a/exec/sync.h +++ b/exec/sync.h @@ -40,7 +40,10 @@ #include "totemsrp.h" struct sync_callbacks { - void (*sync_init) (void); + void (*sync_init) ( + const unsigned int *member_list, + size_t member_list_entries, + const struct memb_ring_id *ring_id); int (*sync_process) (void); void (*sync_activate) (void); void (*sync_abort) (void); @@ -53,7 +56,7 @@ int sync_register ( struct sync_callbacks *callbacks), void (*next_start) ( - unsigned int *member_list, + const unsigned int *member_list, size_t member_list_entries, const struct memb_ring_id *ring_id)); diff --git a/exec/syncv2.c b/exec/syncv2.c index 211a53a9..89db1cf3 100644 --- a/exec/syncv2.c +++ b/exec/syncv2.c @@ -80,7 +80,10 @@ enum sync_state { struct service_entry { int service_id; - void (*sync_init) (void); + void (*sync_init) ( + const unsigned int *member_list, + size_t member_list_entries, + const struct memb_ring_id *ring_id); void (*sync_abort) (void); int (*sync_process) (void); void (*sync_activate) (void); @@ -113,7 +116,11 @@ static int my_processing_idx = 0; static hdb_handle_t my_schedwrk_handle; -static struct processor_entry my_processor_list[128]; +static struct processor_entry my_processor_list[PROCESSOR_COUNT_MAX]; + +static unsigned int my_member_list[PROCESSOR_COUNT_MAX]; + +static size_t my_member_list_entries = 0; static int my_processor_list_entries = 0; @@ -123,7 +130,7 @@ static int my_service_list_entries = 0; static const struct memb_ring_id sync_ring_id; -static struct service_entry my_initial_service_list[128]; +static struct service_entry my_initial_service_list[PROCESSOR_COUNT_MAX]; static int my_initial_service_list_entries; @@ -229,7 +236,10 @@ static void sync_barrier_handler (unsigned int nodeid, const void *msg) } } -static void dummy_sync_init (void) +static void dummy_sync_init ( + const unsigned int *member_list, + unsigned int member_list_entries, + const struct memb_ring_id *ring_id) { } @@ -438,7 +448,8 @@ static int schedwrk_processor (const void *context) if (my_service_list[my_processing_idx].state == INIT) { my_service_list[my_processing_idx].state = PROCESS; - my_service_list[my_processing_idx].sync_init (); + my_service_list[my_processing_idx].sync_init (my_member_list, my_member_list_entries, + &my_ring_id); } if (my_service_list[my_processing_idx].state == PROCESS) { my_service_list[my_processing_idx].state = PROCESS; diff --git a/include/corosync/engine/coroapi.h b/include/corosync/engine/coroapi.h index 0f104156..3601bab7 100644 --- a/include/corosync/engine/coroapi.h +++ b/include/corosync/engine/coroapi.h @@ -629,7 +629,10 @@ struct corosync_service_engine { const unsigned int *joined_list, size_t joined_list_entries, const struct memb_ring_id *ring_id); enum cs_sync_mode sync_mode; - void (*sync_init) (void); + void (*sync_init) ( + const unsigned int *member_list, + size_t member_list_entries, + const struct memb_ring_id *ring_id); int (*sync_process) (void); void (*sync_activate) (void); void (*sync_abort) (void); diff --git a/services/cpg.c b/services/cpg.c index 46ae68e6..5c93586c 100644 --- a/services/cpg.c +++ b/services/cpg.c @@ -206,7 +206,11 @@ static int cpg_node_joinleave_send (unsigned int pid, const mar_cpg_name_t *grou static int cpg_exec_send_joinlist(void); -static void cpg_sync_init (void); +static void cpg_sync_init ( + const unsigned int *member_list, + size_t member_list_entries, + const struct memb_ring_id *ring_id); + static int cpg_sync_process (void); static void cpg_sync_activate (void); static void cpg_sync_abort (void); @@ -354,7 +358,10 @@ struct req_exec_cpg_downlist { static struct req_exec_cpg_downlist g_req_exec_cpg_downlist; -static void cpg_sync_init (void) +static void cpg_sync_init ( + const unsigned int *member_list, + size_t member_list_entries, + const struct memb_ring_id *ring_id) { }