radioInterface: Atomically fetch and change underrun variable

Otherwise, it could happen that underrun events are lost:
TxLower (isUnderrun):	RxLower (pullBuffer):
read(underrun)
			read(underrun)
			write(underrun, |val) [maybe underrun becomes TRUE]
write(underrun, false)

Similary, it could happen the other direction if atomic was only applied
to isUnderrun:
TxLower (isUnderrun):	RxLower (pullBuffer):
			read(underrun) -> true
read(underrun)-> true
write(underrun, false)
			write(underrun, true|val) where val=false

So in here isUnderrun would return true twice while it should only
return one.

Change-Id: I684e0a5d2a9583a161d5a6593559b3a9e7cd57e3
diff --git a/Transceiver52M/radioInterfaceMulti.cpp b/Transceiver52M/radioInterfaceMulti.cpp
index eec426e..92e31e1 100644
--- a/Transceiver52M/radioInterfaceMulti.cpp
+++ b/Transceiver52M/radioInterfaceMulti.cpp
@@ -251,7 +251,7 @@
 	convert_short_float((float *) outerRecvBuffer->begin(),
 			    convertRecvBuffer[0], 2 * outerRecvBuffer->size());
 
-	underrun |= local_underrun;
+	osmo_trx_sync_or_and_fetch(&underrun, local_underrun);
 	readTimestamp += num;
 
 	channelizer->rotate((float *) outerRecvBuffer->begin(),
@@ -348,7 +348,7 @@
 		LOG(ALERT) << "Transmit error " << num;
 	}
 
-	underrun |= local_underrun;
+	osmo_trx_sync_or_and_fetch(&underrun, local_underrun);
 	writeTimestamp += num;
 
 	return true;