crm_info("Stopping %s", this_subsys->name);
do_pe_control(long long action,	      enum crmd_fsa_cause cause,	      enum crmd_fsa_state cur_state,	      enum crmd_fsa_input current_input,	      fsa_data_t *msg_data){	enum crmd_fsa_input result = I_NULL;	struct crm_subsystem_s *this_subsys = pe_subsystem;	long long stop_actions = A_PE_STOP;	long long start_actions = A_PE_START;		if(action & stop_actions) {		crm_info("Stopping %s", this_subsys->name);		if(stop_subsystem(this_subsys) == FALSE) {			register_fsa_error(C_FSA_INTERNAL, I_FAIL, NULL);					} else if(this_subsys->pid > 0) {			int lpc = CLIENT_EXIT_WAIT;			int pid_status = -1;			while(lpc-- > 0 && this_subsys->pid > 0) {				sleep(1);				if(! CL_PID_EXISTS(this_subsys->pid)				   || waitpid(this_subsys->pid,					      &pid_status, WNOHANG) > 0) {					this_subsys->pid = -1;					break;				}			}						if(this_subsys->pid != -1) {				crm_err("Proc %s is still active with pid=%d",				       this_subsys->name, this_subsys->pid);				register_fsa_error(C_FSA_INTERNAL, I_FAIL, NULL);			} 		}		cleanup_subsystem(this_subsys);	}	if(action & start_actions) {		if(cur_state != S_STOPPING) {			crm_info("Starting %s", this_subsys->name);			if(start_subsystem(this_subsys) == FALSE) {				register_fsa_error(C_FSA_INTERNAL, I_FAIL, NULL);				cleanup_subsystem(this_subsys);			}		} else {			crm_info("Ignoring request to start %s while shutting down",			       this_subsys->name);		}	}		return result;}