crm_debug("Shutdown op %d (%s %s) confirmed",
crm_debug("Op %d (%s %s) confirmed",
do_lrm_event(long long action,	     enum crmd_fsa_cause cause,	     enum crmd_fsa_state cur_state,	     enum crmd_fsa_input cur_input,	     fsa_data_t *msg_data){	lrm_op_t* op = NULL;	const char *last_op = NULL;		if(msg_data->fsa_cause != C_LRM_OP_CALLBACK) {		register_fsa_error(C_FSA_INTERNAL, I_FAIL, NULL);		return I_NULL;	}	op = fsa_typed_data(fsa_dt_lrm);		CRM_DEV_ASSERT(op != NULL);	CRM_DEV_ASSERT(op != NULL && op->rsc_id != NULL);	if(crm_assert_failed) {		return I_NULL;	}	if(op->op_status == LRM_OP_DONE && op->rc != EXECRA_OK) {		crm_warn("Mapping operation %d status with a rc=%d"			 " to status %d",			 op->op_status, op->rc, LRM_OP_ERROR);		op->op_status = LRM_OP_ERROR;	}	switch(op->op_status) {		case LRM_OP_PENDING:			/* this really shouldnt happen */			crm_err("LRM operation (%d) %s on %s %s: %s",				op->call_id, op->op_type,				crm_str(op->rsc_id),				op_status2text(op->op_status),				execra_code2string(op->rc));			break;		case LRM_OP_ERROR:			crm_err("LRM operation (%d) %s on %s %s: %s",				op->call_id, op->op_type,				crm_str(op->rsc_id),				op_status2text(op->op_status),				execra_code2string(op->rc));			crm_debug("Result: %s", op->output);			break;		case LRM_OP_CANCELLED:			crm_warn("LRM operation (%d) %s on %s %s",				 op->call_id, op->op_type,				 crm_str(op->rsc_id),				 op_status2text(op->op_status));			return I_NULL;			break;		case LRM_OP_TIMEOUT:			last_op = g_hash_table_lookup(				resources_confirmed, crm_strdup(op->rsc_id));			if(safe_str_eq(last_op, CRMD_ACTION_STOP)			   && safe_str_eq(op->op_type, CRMD_ACTION_MON)) {				crm_err("LRM sent a timed out %s operation"					" _after_ a confirmed stop",					op->op_type);				return I_NULL;			}			crm_err("LRM operation (%d) %s on %s %s",				op->call_id, op->op_type,				crm_str(op->rsc_id),				op_status2text(op->op_status));			break;		case LRM_OP_NOTSUPPORTED:			crm_err("LRM operation (%d) %s on %s %s",				op->call_id, op->op_type,				crm_str(op->rsc_id),				op_status2text(op->op_status));			break;		case LRM_OP_DONE:			crm_debug("LRM operation (%d) %s on %s %s",				  op->call_id, op->op_type,				  crm_str(op->rsc_id),				  op_status2text(op->op_status));			break;	}	g_hash_table_replace(resources_confirmed,			     crm_strdup(op->rsc_id), crm_strdup(op->op_type));	do_update_resource(op);	if(g_hash_table_size(shutdown_ops) > 0) {		char *op_id = make_stop_id(op->rsc_id, op->call_id);		if(g_hash_table_remove(shutdown_ops, op_id)) {			crm_debug("Shutdown op %d (%s %s) confirmed",				  op->call_id, op->op_type, op->rsc_id);		} else {			crm_debug("Shutdown op %d (%s %s) not matched: %s",				  op->call_id, op->op_type, op->rsc_id, op_id);		}		crm_free(op_id);	}		if(is_set(fsa_input_register, R_SENT_RSC_STOP)) {		if(g_hash_table_size(shutdown_ops) == 0) {			register_fsa_input(C_FSA_INTERNAL, I_TERMINATE, NULL);					} else {			crm_debug("Still waiting for %d pending stop operations"				  " to complete before exiting",				  g_hash_table_size(shutdown_ops));			g_hash_table_foreach(				shutdown_ops, ghash_print_pending, NULL);		}	}		return I_NULL;}