kernel/eka/klib/kheap.cpp
changeset 109 b3a1d9898418
parent 0 a41df078684a
child 257 3e88ff8f41d5
equal deleted inserted replaced
102:ef2a444a7410 109:b3a1d9898418
    18 #include <kernel/kern_priv.h>
    18 #include <kernel/kern_priv.h>
    19 
    19 
    20 _LIT(KLitKernHeap,"KernHeap");
    20 _LIT(KLitKernHeap,"KernHeap");
    21 
    21 
    22 RHeapK::RHeapK(TInt aInitialSize)
    22 RHeapK::RHeapK(TInt aInitialSize)
    23 	: RHeap(aInitialSize, 0, EFalse)
    23 	: RHybridHeap(aInitialSize, 0, EFalse)			
    24 	{
    24 	{
    25 	}
    25 	}
    26 
    26 
    27 TInt RHeapK::Compress()
    27 TInt RHeapK::Compress()
    28 	{
    28 	{
    57 RHeapK* RHeapK::FixedHeap(TAny* aBase, TInt aInitialSize)
    57 RHeapK* RHeapK::FixedHeap(TAny* aBase, TInt aInitialSize)
    58 //
    58 //
    59 // Create a kernel fixed heap.
    59 // Create a kernel fixed heap.
    60 //
    60 //
    61 	{
    61 	{
    62 
    62 	__ASSERT_ALWAYS(aInitialSize>(TInt)sizeof(RHeapK), K::Fault(K::ETHeapMaxLengthNegative));
    63 	__ASSERT_ALWAYS(aInitialSize>KMinHeapSize, K::Fault(K::ETHeapMaxLengthNegative));
       
    64 	return new(aBase) RHeapK(aInitialSize);
    63 	return new(aBase) RHeapK(aInitialSize);
    65 	}
    64 	}
    66 
    65 
    67 void RHeapK::CheckThreadState()
    66 void RHeapK::CheckThreadState()
    68 //
    67 //
    72 	if (K::Initialising)
    71 	if (K::Initialising)
    73 		return;
    72 		return;
    74 	__NK_ASSERT_UNLOCKED;
    73 	__NK_ASSERT_UNLOCKED;
    75 	__ASSERT_NO_FAST_MUTEX;
    74 	__ASSERT_NO_FAST_MUTEX;
    76 	__ASSERT_CRITICAL;
    75 	__ASSERT_CRITICAL;
       
    76 	}
       
    77 
       
    78 void RHybridHeap::Lock() const   
       
    79 	{
       
    80 	DMutex* m = *(DMutex**)&iLock;
       
    81 	if (m)
       
    82 		Kern::MutexWait(*m);
       
    83 	}
       
    84 
       
    85 void RHybridHeap::Unlock() const   
       
    86 	{
       
    87 	DMutex* m = *(DMutex**)&iLock;
       
    88 	if (m)
       
    89 		Kern::MutexSignal(*m);
    77 	}
    90 	}
    78 
    91 
    79 void RHeapK::Fault(TInt aFault)
    92 void RHeapK::Fault(TInt aFault)
    80 	{
    93 	{
    81 	Kern::Fault("KERN-HEAP", aFault);
    94 	Kern::Fault("KERN-HEAP", aFault);