} else if(src_new != NULL && src_existing != NULL && strcmp(src_new, src_existing) == 0) { do_status_update(res, anXmlNode);  } else if(ts_new == NULL) { cl_log(LOG_ERR, "Update did not have a timestamp!  Discarding");
if(from_owner) { return update_cib_object(root, anXmlNode, TRUE);
updateStatus(xmlNodePtr cib, cibStatus *anXmlNode){	xmlNodePtr res = NULL;	const char *ts_existing = NULL;	const char *ts_new = NULL;	const char *src_existing = NULL;	const char *src_new = NULL;		FNIN();		res = findStatus(cib, ID(anXmlNode), INSTANCE(anXmlNode));	ts_existing  = TSTAMP(res);	ts_new       = TSTAMP(anXmlNode);	src_existing = xmlGetProp(res, XML_CIB_ATTR_SOURCE);	src_new      = xmlGetProp(anXmlNode, XML_CIB_ATTR_SOURCE);	if (res == NULL) {		CRM_DEBUG4("Update: %s (%s:%s) did not exist, adding.",			   XML_CIB_TAG_STATE,			   ID(anXmlNode),			   INSTANCE(anXmlNode));		addStatus(cib, anXmlNode);	// local information always takes priority	} else if(src_new != NULL		  && src_existing != NULL		  && strcmp(src_new, src_existing) == 0) {		do_status_update(res, anXmlNode);			} else if(ts_new == NULL) {		cl_log(LOG_ERR,		       "Update did not have a timestamp!  Discarding");	// only use new data		} else if(ts_existing == NULL || strcmp(ts_new, ts_existing) > 0) {		do_status_update(res, anXmlNode);	} else {		cl_log(LOG_WARNING,		       "Ignoring old \"update\" (%s vs. %s)",		       ts_new, ts_existing);	}		FNRET(0);}