@Override
	public boolean setPrimary() {
		try (LockHold hold = LockHold.lock(manager.lock.writeLock())) {
			AddressRangeImpl range = new AddressRangeImpl(address, address);
			boolean result = doSetPrimary(true);
			if (!result) {
				return false;
			}

			// TODO: May be able to resolve "multiple overlapping primary" with priority instead
			boolean firedEvent = false;
			update(FLAGS_COLUMN);
			for (DBTraceLabelSymbol other : manager.labels.getIntersecting(lifespan, thread, range,
				false, true)) {
				if (other.doSetPrimary(false)) {
					other.update(AbstractDBTraceSymbol.FLAGS_COLUMN);
					manager.trace.setChanged(new TraceChangeRecord<>(
						TraceEvents.SYMBOL_PRIMARY_CHANGED, getSpace(), this, other, this));
					firedEvent = true;
				}
			}
			if (!firedEvent) {
				manager.trace.setChanged(new TraceChangeRecord<>(
					TraceEvents.SYMBOL_PRIMARY_CHANGED, getSpace(), this));
			}
			return true;
		}
	}
Set the primary flag.

The caller must still call {@link #update(DBObjectColumn...)} for {@link #FLAGS_COLUMN}, if
this method returns true.

@return true if the primary flag was modified.
Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceLabelSymbol.java