54 delete iSharedChunks; |
54 delete iSharedChunks; |
55 |
55 |
56 DProcess::Destruct(); |
56 DProcess::Destruct(); |
57 } |
57 } |
58 |
58 |
|
59 |
59 TInt DMemModelProcess::TryOpenOsAsid() |
60 TInt DMemModelProcess::TryOpenOsAsid() |
60 { |
61 { |
61 if (__e32_atomic_tas_ord32(&iOsAsidRefCount, 1, 1, 0)) |
62 if (__e32_atomic_tas_ord32(&iOsAsidRefCount, 1, 1, 0)) |
62 { |
63 { |
63 return iOsAsid; |
64 return iOsAsid; |
64 } |
65 } |
65 return KErrDied; |
66 return KErrDied; |
66 } |
67 } |
|
68 |
67 |
69 |
68 void DMemModelProcess::CloseOsAsid() |
70 void DMemModelProcess::CloseOsAsid() |
69 { |
71 { |
70 if (__e32_atomic_tas_ord32(&iOsAsidRefCount, 1, -1, 0) == 1) |
72 if (__e32_atomic_tas_ord32(&iOsAsidRefCount, 1, -1, 0) == 1) |
71 {// Last reference has been closed so free the asid. |
73 {// Last reference has been closed so free the asid. |
72 MM::AddressSpaceFree(iOsAsid); |
74 MM::AddressSpaceFree(iOsAsid); |
73 } |
75 } |
74 } |
76 } |
75 |
77 |
|
78 |
76 void DMemModelProcess::AsyncCloseOsAsid() |
79 void DMemModelProcess::AsyncCloseOsAsid() |
77 { |
80 { |
78 if (__e32_atomic_tas_ord32(&iOsAsidRefCount, 1, -1, 0) == 1) |
81 if (__e32_atomic_tas_ord32(&iOsAsidRefCount, 1, -1, 0) == 1) |
79 {// Last reference has been closed so free the asid asynchronusly. |
82 {// Last reference has been closed so free the asid asynchronusly. |
80 MM::AsyncAddressSpaceFree(iOsAsid); |
83 MM::AsyncAddressSpaceFree(iOsAsid); |
81 } |
84 } |
82 } |
85 } |
|
86 |
83 |
87 |
84 TInt DMemModelProcess::NewChunk(DChunk*& aChunk, SChunkCreateInfo& aInfo, TLinAddr& aRunAddr) |
88 TInt DMemModelProcess::NewChunk(DChunk*& aChunk, SChunkCreateInfo& aInfo, TLinAddr& aRunAddr) |
85 { |
89 { |
86 aChunk=NULL; |
90 aChunk=NULL; |
87 |
91 |