Index: /trunk/src/VBox/Runtime/r0drv/solaris/timer-r0drv-solaris.c
===================================================================
--- /trunk/src/VBox/Runtime/r0drv/solaris/timer-r0drv-solaris.c	(revision 53402)
+++ /trunk/src/VBox/Runtime/r0drv/solaris/timer-r0drv-solaris.c	(revision 53403)
@@ -308,23 +308,4 @@
      */
     RTTimerStop(pTimer);
-
-    /** @remarks Do -not- call this function from a timer callback,
-     *           cyclic_remove() will deadlock the system. */
-    if (pTimer->pSingleTimer)
-    {
-        mutex_enter(&cpu_lock);
-        cyclic_remove(pTimer->hCyclicId);
-        mutex_exit(&cpu_lock);
-        RTMemFree(pTimer->pSingleTimer);
-    }
-    else if (pTimer->pOmniTimer)
-    {
-        mutex_enter(&cpu_lock);
-        cyclic_remove(pTimer->hCyclicId);
-        mutex_exit(&cpu_lock);
-        RTMemFree(pTimer->pOmniTimer->au64Ticks);
-        RTMemFree(pTimer->pOmniTimer);
-    }
-
     ASMAtomicWriteU32(&pTimer->u32Magic, ~RTTIMER_MAGIC);
     RTMemFree(pTimer);
@@ -433,12 +414,23 @@
         return VERR_TIMER_SUSPENDED;
 
-    /*
-     * Solaris does not allow removing cyclics from the timer callback but it does allow
-     * reprogramming the cyclic. Reprogram such that it never expires.
-     */
-    int rc = RTTimerChangeInterval(pTimer, CY_INFINITY);
-    if (RT_SUCCESS(rc))
-        pTimer->fSuspended = true;
-    return rc;
+    /** @remarks Do -not- call this function from a timer callback,
+     *           cyclic_remove() will deadlock the system. */
+    pTimer->fSuspended = true;
+    if (pTimer->pSingleTimer)
+    {
+        mutex_enter(&cpu_lock);
+        cyclic_remove(pTimer->hCyclicId);
+        mutex_exit(&cpu_lock);
+        RTMemFree(pTimer->pSingleTimer);
+    }
+    else if (pTimer->pOmniTimer)
+    {
+        mutex_enter(&cpu_lock);
+        cyclic_remove(pTimer->hCyclicId);
+        mutex_exit(&cpu_lock);
+        RTMemFree(pTimer->pOmniTimer->au64Ticks);
+        RTMemFree(pTimer->pOmniTimer);
+    }
+    return VINF_SUCCESS;
 }
 
@@ -446,18 +438,5 @@
 RTDECL(int) RTTimerChangeInterval(PRTTIMER pTimer, uint64_t u64NanoInterval)
 {
-    RTTIMER_ASSERT_VALID_RET(pTimer);
-
-    if (pTimer->hCyclicId != CYCLIC_NONE)
-    {
-        uint64_t uNanoTS = RTTimeSystemNanoTS();
-        if (   u64NanoInterval >= CY_INFINITY
-            || uNanoTS >= CY_INFINITY - u64NanoInterval)
-            cyclic_reprogram(pTimer->hCyclicId, CY_INFINITY);
-        else
-            cyclic_reprogram(pTimer->hCyclicId, (hrtime_t)(u64NanoInterval + uNanoTS));
-
-        return VINF_SUCCESS;
-    }
-    return VERR_INVALID_STATE;
+    return VERR_NOT_SUPPORTED;
 }
 
