Index: /trunk/src/VBox/Runtime/r0drv/linux/alloc-r0drv-linux.c
===================================================================
--- /trunk/src/VBox/Runtime/r0drv/linux/alloc-r0drv-linux.c	(revision 290)
+++ /trunk/src/VBox/Runtime/r0drv/linux/alloc-r0drv-linux.c	(revision 291)
@@ -53,5 +53,5 @@
 static RTHEAPSIMPLE g_HeapExec = NIL_RTHEAPSIMPLE;
 /** Spinlock protecting the heap. */
-static RTSPINLOCK   g_HeapExecSpinlock = NIL_RTHEAPSIMPLE;
+static RTSPINLOCK   g_HeapExecSpinlock = NIL_RTSPINLOCK;
 
 
@@ -84,7 +84,8 @@
 RTDECL(int) RTMemExecDonate(void *pvMemory, size_t cb)
 {
+    int rc;
     AssertReturn(g_HeapExec == NIL_RTHEAPSIMPLE, VERR_WRONG_ORDER);
 
-    int rc = RTSpinlockCreate(&g_HeapExecSpinlock);
+    rc = RTSpinlockCreate(&g_HeapExecSpinlock);
     if (RT_SUCCESS(rc))
     {
@@ -115,9 +116,9 @@
         if (g_HeapExec != NIL_RTHEAPSIMPLE)
         {
-            fFlags |= RTMEMHDR_FLAG_EXEC_HEAP;
             RTSPINLOCKTMP SpinlockTmp = RTSPINLOCKTMP_INITIALIZER;
             RTSpinlockAcquireNoInts(g_HeapExecSpinlock, &SpinlockTmp);
             pHdr = (PRTMEMHDR)RTHeapSimpleAlloc(g_HeapExec, cb + sizeof(*pHdr), 0);
             RTSpinlockReleaseNoInts(g_HeapExecSpinlock, &SpinlockTmp);
+            fFlags |= RTMEMHDR_FLAG_EXEC_HEAP;
         }
         else
@@ -168,4 +169,5 @@
     else if (pHdr->fFlags & RTMEMHDR_FLAG_EXEC_HEAP)
     {
+        RTSPINLOCKTMP SpinlockTmp = RTSPINLOCKTMP_INITIALIZER;
         RTSpinlockAcquireNoInts(g_HeapExecSpinlock, &SpinlockTmp);
         RTHeapSimpleFree(g_HeapExec, pHdr);
