kernel/eka/kernel/server.cpp
branchRCL_3
changeset 21 e7d2d738d3c2
parent 0 a41df078684a
child 43 c1f20ce4abcf
--- a/kernel/eka/kernel/server.cpp	Fri Mar 12 15:50:11 2010 +0200
+++ b/kernel/eka/kernel/server.cpp	Mon Mar 15 12:45:50 2010 +0200
@@ -1009,7 +1009,7 @@
 */
 EXPORT_C void DBase::AsyncDelete()
 	{
-	CHECK_PRECONDITIONS(MASK_KERNEL_UNLOCKED | MASK_INTERRUPTS_ENABLED | MASK_NOT_ISR | MASK_NOT_IDFC | MASK_CRITICAL, "DObject::AsyncDelete");
+	CHECK_PRECONDITIONS(MASK_NO_KILL_OR_SUSPEND | MASK_INTERRUPTS_ENABLED | MASK_NOT_ISR | MASK_NOT_IDFC, "DObject::AsyncDelete");
 	__KTRACE_OPT(KSERVER,Kern::Printf("DBase::AsyncDelete() %08x",this));
 	
 	DBase* oldHead = K::AsyncDeleteHead;
@@ -1039,22 +1039,14 @@
 // Asynchronously free a kernel heap cell (must be >=4 bytes in length)
 //
 	{
-	CHECK_PRECONDITIONS(MASK_KERNEL_UNLOCKED | MASK_INTERRUPTS_ENABLED | MASK_NOT_ISR | MASK_NOT_IDFC | MASK_CRITICAL, "Kern::AsyncFree");
+	CHECK_PRECONDITIONS(MASK_NO_KILL_OR_SUSPEND | MASK_INTERRUPTS_ENABLED | MASK_NOT_ISR | MASK_NOT_IDFC, "Kern::AsyncFree");
 	__KTRACE_OPT(KSERVER,Kern::Printf("Kern::AsyncFree(%08x)",aPtr));
-	DThread* pT=TheCurrentThread;
-
-	// if we are already running in the kernel server, just free the cell now
-	if (pT==K::TheKernelThread)
-		Kern::Free(aPtr);
-	else
-		{
-		TAny* oldHead = K::AsyncFreeHead;
-		do	{
-			*(TAny**)aPtr = oldHead;	// use first word of cell as link field
-			} while (!__e32_atomic_cas_rel_ptr(&K::AsyncFreeHead, &oldHead, aPtr));
-		if (!oldHead)
-			K::AsyncFreeDfc.Enque();
-		}
+	TAny* oldHead = K::AsyncFreeHead;
+	do	{
+		*(TAny**)aPtr = oldHead;	// use first word of cell as link field
+		} while (!__e32_atomic_cas_rel_ptr(&K::AsyncFreeHead, &oldHead, aPtr));
+	if (!oldHead)
+		K::AsyncFreeDfc.Enque();
 	}