The patch works but it introduces a regression. I´ll send you another one soon. Fabio On 1/14/2012 10:13 PM, Steven Dake wrote: > Signed-off-by: Steven Dake <sdake@xxxxxxxxxx> > --- > exec/service.c | 9 ++++++--- > exec/service.h | 2 ++ > exec/votequorum.c | 14 +++++--------- > exec/vsf_quorum.c | 46 +++++++--------------------------------------- > 4 files changed, 20 insertions(+), 51 deletions(-) > > diff --git a/exec/service.c b/exec/service.c > index 787b289..ed2f3fb 100644 > --- a/exec/service.c > +++ b/exec/service.c > @@ -99,13 +99,16 @@ static struct default_service default_services[] = { > .loader = wd_get_service_engine_ver0 > }, > #endif > -#ifdef HAVE_VOTEQUORUM > { > - .name = "corosync_quorum", > + .name = "corosync_votequorum", > .ver = 0, > .loader = votequorum_get_service_engine_ver0 > }, > -#endif > + { > + .name = "corosync_quorum", > + .ver = 0, > + .loader = vsf_quorum_get_service_engine_ver0 > + }, > { > .name = "corosync_cmap", > .ver = 0, > diff --git a/exec/service.h b/exec/service.h > index 33d6053..5309174 100644 > --- a/exec/service.h > +++ b/exec/service.h > @@ -77,6 +77,8 @@ extern const char *service_stats_rx[SERVICE_HANDLER_MAXIMUM_COUNT][64]; > extern const char *service_stats_tx[SERVICE_HANDLER_MAXIMUM_COUNT][64]; > > struct corosync_service_engine *votequorum_get_service_engine_ver0 (void); > +struct corosync_service_engine *vsf_quorum_get_service_engine_ver0 (void); > +struct corosync_service_engine *quorum_get_service_handler_ver0 (void); > struct corosync_service_engine *pload_get_service_engine_ver0 (void); > struct corosync_service_engine *cfg_get_service_engine_ver0 (void); > struct corosync_service_engine *evs_get_service_engine_ver0 (void); > diff --git a/exec/votequorum.c b/exec/votequorum.c > index 6e7d852..baf7b8c 100644 > --- a/exec/votequorum.c > +++ b/exec/votequorum.c > @@ -161,9 +161,6 @@ struct quorum_pd { > * Service Interfaces required by service_message_handler struct > */ > > -static void votequorum_init(struct corosync_api_v1 *api, > - quorum_set_quorate_fn_t report); > - > static void quorum_confchg_fn ( > enum totem_configuration_type configuration_type, > const unsigned int *member_list, size_t member_list_entries, > @@ -300,7 +297,7 @@ struct corosync_service_engine *votequorum_get_service_engine_ver0 (void) > return (&quorum_service_handler); > } > > -static void votequorum_init(struct corosync_api_v1 *api, > +void votequorum_init(struct corosync_api_v1 *api, > quorum_set_quorate_fn_t report) > { > ENTER(); > @@ -325,9 +322,6 @@ static void votequorum_init(struct corosync_api_v1 *api, > wait_for_all_status = 1; > } > > - /* Load the library-servicing part of this module */ > - api->service_link_and_init(api, "corosync_votequorum_iface", 0); > - > LEAVE(); > } > > @@ -962,8 +956,10 @@ static void quorum_confchg_fn ( > memcpy(&quorum_ringid, ring_id, sizeof(*ring_id)); > > if (configuration_type == TOTEM_CONFIGURATION_REGULAR) { > - set_quorum(quorum_members, quorum_members_entries, > - cluster_is_quorate, &quorum_ringid); > + if (set_quorum) { > + set_quorum(quorum_members, quorum_members_entries, > + cluster_is_quorate, &quorum_ringid); > + } > } > > LEAVE(); > diff --git a/exec/vsf_quorum.c b/exec/vsf_quorum.c > index bef65fd..9a8dd9c 100644 > --- a/exec/vsf_quorum.c > +++ b/exec/vsf_quorum.c > @@ -193,7 +193,7 @@ static struct corosync_service_engine quorum_service_handler = { > .sync_mode = CS_SYNC_V1 > }; > > -static struct corosync_service_engine *quorum_get_service_handler_ver0 (void) > +struct corosync_service_engine *vsf_quorum_get_service_engine_ver0 (void) > { > return (&quorum_service_handler); > } > @@ -253,14 +253,10 @@ static int quorum_exec_init_fn (struct corosync_api_v1 *api) > hdb_handle_t q_handle; > char *quorum_module; > int res; > - void *quorum_iface_p; > - void* _start; > - void* _stop; > > #ifdef COROSYNC_SOLARIS > logsys_subsys_init(); > #endif > -#ifdef SDAKE > corosync_api = api; > list_init (&lib_trackers_list); > list_init (&internal_trackers_list); > @@ -269,50 +265,22 @@ static int quorum_exec_init_fn (struct corosync_api_v1 *api) > * Tell corosync we have a quorum engine. > */ > api->quorum_initialize(&callins); > + primary_designated = 1; > + quorum_type = 0; > > /* > * Look for a quorum provider > */ > if (icmap_get_string("quorum.provider", &quorum_module) == CS_OK) { > - res = lcr_ifact_reference ( > - &q_handle, > - quorum_module, > - 0, > - &quorum_iface_p, > - 0); > - > - if (res == -1) { > - log_printf (LOGSYS_LEVEL_NOTICE, > - "Couldn't load quorum provider %s\n", > - quorum_module); > - free(quorum_module); > - return (-1); > - } > - > log_printf (LOGSYS_LEVEL_NOTICE, > "Using quorum provider %s\n", quorum_module); > > - /* > - * Register the log sites with libqb > - */ > - _start = lcr_ifact_addr_get(q_handle, "__start___verbose"); > - _stop = lcr_ifact_addr_get(q_handle, "__stop___verbose"); > - qb_log_callsites_register(_start, _stop); > - > - quorum_iface = (struct quorum_services_api_ver1 *)quorum_iface_p; > - quorum_iface->init (api, quorum_api_set_quorum); > - quorum_type = 1; > - free(quorum_module); > - } > - if (!quorum_iface) { > - /* > - * With no quorum provider, we are always quorate > - */ > - primary_designated = 1; > - quorum_type = 0; > + if (strcmp (quorum_module, "corosync_votequorum") == NULL) { > + votequorum_init (api, quorum_api_set_quorum); > + quorum_type = 1; > + } > } > > -#endif > return (0); > } > _______________________________________________ discuss mailing list discuss@xxxxxxxxxxxx http://lists.corosync.org/mailman/listinfo/discuss