JASHeapCtrl OK (#2893)

This commit is contained in:
LagoLunatic 2025-11-30 00:30:50 -05:00 committed by GitHub
parent 1be301393b
commit 7abe8d4a40
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 22 additions and 19 deletions

View File

@ -944,7 +944,7 @@ config.libs = [
Object(NonMatching, "JSystem/JAudio2/JASTaskThread.cpp"),
Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASDvdThread.cpp"),
Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASCallback.cpp"),
Object(NonMatching, "JSystem/JAudio2/JASHeapCtrl.cpp"),
Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASHeapCtrl.cpp"),
Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASResArcLoader.cpp"),
Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASProbe.cpp"),
Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASReport.cpp"),

View File

@ -26,7 +26,6 @@ public:
/* 802906F0 */ JASHeap* getTailHeap();
/* 8029077C */ u32 getTailOffset();
/* 802907E0 */ u32 getCurOffset();
/* 80290B54 */ ~JASHeap() {}
void* getBase() { return mBase; }
bool isAllocated() { return mBase; }
@ -70,7 +69,11 @@ namespace JASThreadingModel {
};
template <typename A0>
struct ObjectLevelLockable {
struct ObjectLevelLockable : public OSMutex {
ObjectLevelLockable() {
OSInitMutex(this);
}
struct Lock {
Lock(A0 const& mutex) {
mMutex = (A0*)&mutex;
@ -84,7 +87,7 @@ namespace JASThreadingModel {
A0* mMutex;
};
};
};
}; // namespace JASThreadingModel
/**
* @ingroup jsystem-jaudio
@ -113,7 +116,7 @@ namespace JASKernel { JKRHeap* getSystemHeap(); };
*
*/
template<u32 ChunkSize, template<typename> class T>
class JASMemChunkPool : public OSMutex {
class JASMemChunkPool : public T<JASMemChunkPool<ChunkSize, T> >::ObjectLevelLockable {
struct MemoryChunk {
MemoryChunk(MemoryChunk* nextChunk) {
mNextChunk = nextChunk;
@ -163,9 +166,9 @@ class JASMemChunkPool : public OSMutex {
};
public:
JASMemChunkPool() {
OSInitMutex(this);
field_0x18 = NULL;
createNewChunk();
bool ret = createNewChunk();
JUT_ASSERT(320, ret);
}
bool createNewChunk() {
@ -179,6 +182,7 @@ public:
if (field_0x18 != NULL) {
uVar2 = 1;
} else {
JUT_WARN(428, "%s", "Not enough JASSystemHeap");
field_0x18 = new (JKRHeap::getSystemHeap(), 0) MemoryChunk(pMVar4);
if (field_0x18 != NULL) {
uVar2 = 1;
@ -193,7 +197,8 @@ public:
void* alloc(u32 size) {
typename T<JASMemChunkPool<ChunkSize, T> >::Lock lock(*this);
if (field_0x18->getFreeSize() < size) {
u32 freeSize = field_0x18->getFreeSize();
if (freeSize < size) {
if (ChunkSize < size) {
return NULL;
}

View File

@ -10,7 +10,7 @@
struct JASMutexLock {
JASMutexLock(OSMutex* mutex) {
mMutex = mutex;
OSLockMutex(mMutex);
OSLockMutex(mutex);
}
~JASMutexLock() { OSUnlockMutex(mMutex); }

View File

@ -196,19 +196,19 @@ public:
JSUTree<T>* getEndChild() const { return NULL; }
JSUTree<T>* getFirstChild() const { return (JSUTree<T>*)this->getFirst(); }
JSUTree<T>* getFirstChild() const { return (JSUTree<T>*)this->getFirstLink(); }
JSUTree<T>* getLastChild() const { return (JSUTree<T>*)this->getLast(); }
JSUTree<T>* getLastChild() const { return (JSUTree<T>*)this->getLastLink(); }
JSUTree<T>* getNextChild() const { return (JSUTree<T>*)this->getNext(); }
JSUTree<T>* getNextChild() const { return (JSUTree<T>*)JSUPtrLink::mNext; }
JSUTree<T>* getPrevChild() const { return (JSUTree<T>*)this->getPrev(); }
JSUTree<T>* getPrevChild() const { return (JSUTree<T>*)JSUPtrLink::mPrev; }
u32 getNumChildren() const { return this->getNumLinks(); }
T* getObject() const { return (T*)this->getObjectPtr(); }
T* getObject() const { return (T*)JSUPtrLink::mObject; }
JSUTree<T>* getParent() const { return (JSUTree<T>*)this->getList(); }
JSUTree<T>* getParent() const { return (JSUTree<T>*)JSUPtrLink::mList; }
};
/**

View File

@ -104,7 +104,6 @@ bool JASHeap::allocTail(JASHeap* mother, u32 size) {
}
/* 802904E4-80290608 28AE24 0124+00 0/0 4/4 0/0 .text free__7JASHeapFv */
// NONMATCHING regswap
bool JASHeap::free() {
JASMutexLock lock(&mMutex);
if (!isAllocated()) {
@ -140,10 +139,9 @@ bool JASHeap::free() {
/* 80290608-802906F0 28AF48 00E8+00 2/2 0/0 0/0 .text
* insertChild__7JASHeapFP7JASHeapP7JASHeapPvUlb */
// NONMATCHING regalloc
void JASHeap::insertChild(JASHeap* heap, JASHeap* next, void* param_2, u32 param_3, bool param_4) {
JUT_ASSERT(537, heap != NULL);
JUT_ASSERT(538, next == NULL || &mTree == next->mTree.getParent());
JUT_ASSERT(513, heap != NULL);
JUT_ASSERT(514, next == NULL || &mTree == next->mTree.getParent());
JASMutexLock lock(&mMutex);
if (!param_4) {
JSUTreeIterator<JASHeap> it;