start_a_child_client(pe_subsystem, NULL); } }  if(action & A_PE_START || action & A_PE_RESTART) { if(pe_subsystem == NULL) { pe_subsystem = (struct crm_subsystem_s*) ha_malloc(sizeof(struct crm_subsystem_s));  pe_subsystem->pid = 0; pe_subsystem->respawn = 1; pe_subsystem->command = NULL; pe_subsystem->u_runas = -1; pe_subsystem->g_runas = -1; pe_subsystem->path = ha_strdup(BIN_DIR);
if(action & start_actions) {  if(cur_state != S_STOPPING) { if(start_subsystem(this_subsys) == FALSE) result = I_FAIL; } else { cl_log(LOG_INFO, "Ignoring request to start %s while shutting down", this_subsys->command);
do_pe_control(long long action,	    enum crmd_fsa_state cur_state,	    enum crmd_fsa_input current_input,	    void *data){	enum crmd_fsa_input result = I_NULL;		FNIN();	if(action & A_PE_STOP || action & A_PE_RESTART) {		if(pe_subsystem != NULL) {			clear_bit_inplace(&fsa_input_register, R_PE_CONNECTED);						// make sure we do a shutdown			if(pe_subsystem->command != NULL)				ha_free(pe_subsystem->command);			pe_subsystem->command = ha_strdup("pengine -k");			start_a_child_client(pe_subsystem, NULL);		} // else we havent been started yet	}		if(action & A_PE_START || action & A_PE_RESTART) {		if(pe_subsystem == NULL) {			pe_subsystem = (struct crm_subsystem_s*)				ha_malloc(sizeof(struct crm_subsystem_s));						pe_subsystem->pid = 0;				pe_subsystem->respawn = 1;				pe_subsystem->command = NULL;			pe_subsystem->u_runas = -1;	 			pe_subsystem->g_runas = -1;	 			pe_subsystem->path = ha_strdup(BIN_DIR);			}				// make sure we always do a (re)start here		if(pe_subsystem->command != NULL)			ha_free(pe_subsystem->command);		pe_subsystem->command = ha_strdup("pengine -r");			if(start_a_child_client(pe_subsystem, NULL) == FALSE)			result = I_FAIL;	}		FNRET(result);}