Index: /trunk/src/VBox/Devices/Serial/UartCore.cpp
===================================================================
--- /trunk/src/VBox/Devices/Serial/UartCore.cpp	(revision 84280)
+++ /trunk/src/VBox/Devices/Serial/UartCore.cpp	(revision 84281)
@@ -1501,5 +1501,7 @@
     RT_NOREF(pTimer);
 
-    PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_IGNORED); /** @todo r=bird: You already own this crit sect, don't you?!? */
+    VBOXSTRICTRC rc1 = PDMDevHlpTimerLockClock2(pDevIns, pThis->hTimerRcvFifoTimeout, &pThis->CritSect,
+                                                VINF_SUCCESS /* must get it */);
+    AssertRCReturnVoid(VBOXSTRICTRC_VAL(rc1));
 
     if (pThis->FifoRecv.cbUsed < pThis->FifoRecv.cbItl)
@@ -1509,5 +1511,5 @@
     }
 
-    PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+    PDMDevHlpTimerUnlockClock2(pDevIns, pThis->hTimerRcvFifoTimeout, &pThis->CritSect);
 }
 
@@ -1522,5 +1524,7 @@
     RT_NOREF(pTimer);
 
-    PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_IGNORED); /** @todo r=bird: You already own this crit sect, don't you?!? */
+    VBOXSTRICTRC rc1 = PDMDevHlpTimerLockClock2(pDevIns, pThis->hTimerTxUnconnected, &pThis->CritSect,
+                                                VINF_SUCCESS /* must get it */);
+    AssertRCReturnVoid(VBOXSTRICTRC_VAL(rc1));
 
     uint8_t bVal = 0;
@@ -1570,5 +1574,5 @@
     }
 
-    PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+    PDMDevHlpTimerUnlockClock2(pDevIns, pThis->hTimerTxUnconnected, &pThis->CritSect);
 }
 
@@ -2056,21 +2060,15 @@
      * Create the receive FIFO character timeout indicator timer.
      */
-    rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, uartR3RcvFifoTimeoutTimer, pThisCC,
+    rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, uartR3RcvFifoTimeoutTimer, pThisCC,
                               TMTIMER_FLAGS_NO_CRIT_SECT, "UART Rcv FIFO Timer",
                               &pThis->hTimerRcvFifoTimeout);
     AssertRCReturn(rc, rc);
 
-    rc = PDMDevHlpTimerSetCritSect(pDevIns, pThis->hTimerRcvFifoTimeout, &pThis->CritSect);
-    AssertRCReturn(rc, rc);
-
     /*
      * Create the transmit timer when no device is connected.
      */
-    rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, uartR3TxUnconnectedTimer, pThisCC,
+    rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, uartR3TxUnconnectedTimer, pThisCC,
                               TMTIMER_FLAGS_NO_CRIT_SECT, "UART TX uncon. Timer",
                               &pThis->hTimerTxUnconnected);
-    AssertRCReturn(rc, rc);
-
-    rc = PDMDevHlpTimerSetCritSect(pDevIns, pThis->hTimerTxUnconnected, &pThis->CritSect);
     AssertRCReturn(rc, rc);
 
