diff options
Diffstat (limited to 'src/s60main/newallocator_hook.cpp')
-rw-r--r-- | src/s60main/newallocator_hook.cpp | 87 |
1 files changed, 1 insertions, 86 deletions
diff --git a/src/s60main/newallocator_hook.cpp b/src/s60main/newallocator_hook.cpp index 9ea2ef0..9cc6afb 100644 --- a/src/s60main/newallocator_hook.cpp +++ b/src/s60main/newallocator_hook.cpp @@ -41,11 +41,6 @@ #include <e32std.h> #include <qglobal.h> -#ifdef QT_EXPORTS_NOT_FROZEN -// If exports in Qt DLLs are not frozen in this build, then we have to pick up the -// allocator creation function by import link. We know the function will be present -// in the DLLs we test with, as we have to use the DLLs we have built. - struct SStdEpocThreadCreateInfo; Q_CORE_EXPORT TInt qt_symbian_SetupThreadHeap(TBool aNotFirst, SStdEpocThreadCreateInfo& aInfo); @@ -56,88 +51,8 @@ Q_CORE_EXPORT TInt qt_symbian_SetupThreadHeap(TBool aNotFirst, SStdEpocThreadCre * Uses link-time symbol preemption to capture a call from the application * startup. On return, there is some kind of heap allocator installed on the * thread. -*/ +*/ TInt UserHeap::SetupThreadHeap(TBool aNotFirst, SStdEpocThreadCreateInfo& aInfo) { return qt_symbian_SetupThreadHeap(aNotFirst, aInfo); } - -#else // QT_EXPORTS_NOT_FROZEN -// If we are using an export frozen build, it should be compatible with all 4.7.x Qt releases. -// We want to use the allocator creation function introduced in qtcore.dll after 4.7.1. But we -// can't import link to it, as it may not be present in whatever 4.7.x DLLs we are running with. -// So the function is found and called dynamically, by library lookup. If it is not found, we -// use the OS allocator creation functions instead. - -struct SThreadCreateInfo - { - TAny* iHandle; - TInt iType; - TThreadFunction iFunction; - TAny* iPtr; - TAny* iSupervisorStack; - TInt iSupervisorStackSize; - TAny* iUserStack; - TInt iUserStackSize; - TInt iInitialThreadPriority; - TPtrC iName; - TInt iTotalSize; // Size including any extras (must be a multiple of 8 bytes) - }; - -struct SStdEpocThreadCreateInfo : public SThreadCreateInfo - { - RAllocator* iAllocator; - TInt iHeapInitialSize; - TInt iHeapMaxSize; - TInt iPadding; // Make structure size a multiple of 8 bytes - }; - - -/* \internal - * - * Uses link-time symbol preemption to capture a call from the application - * startup. On return, there is some kind of heap allocator installed on the - * thread. -*/ -TInt UserHeap::SetupThreadHeap(TBool aNotFirst, SStdEpocThreadCreateInfo& aInfo) -{ - TInt r = KErrNone; - -#ifndef __WINS__ - // attempt to create the fast allocator through a known export ordinal in qtcore.dll - RLibrary qtcore; - if (qtcore.Load(_L("qtcore.dll")) == KErrNone) - { - const int qt_symbian_SetupThreadHeap_eabi_ordinal = 3713; - TLibraryFunction libFunc = qtcore.Lookup(qt_symbian_SetupThreadHeap_eabi_ordinal); - if (libFunc) - { - typedef int (*TSetupThreadHeapFunc)(TBool aNotFirst, SStdEpocThreadCreateInfo& aInfo); - TSetupThreadHeapFunc p_qt_symbian_SetupThreadHeap = TSetupThreadHeapFunc(libFunc); - r = (*p_qt_symbian_SetupThreadHeap)(aNotFirst, aInfo); - } - qtcore.Close(); - if (libFunc) - return r; - } -#endif - - // no fast allocator support - use default allocator creation - if (!aInfo.iAllocator && aInfo.iHeapInitialSize>0) - { - // new heap required - RHeap* pH = NULL; - r = UserHeap::CreateThreadHeap(aInfo, pH); - } - else if (aInfo.iAllocator) - { - // sharing a heap - RAllocator* pA = aInfo.iAllocator; - pA->Open(); - User::SwitchAllocator(pA); - r = KErrNone; - } - return r; -} - -#endif // QT_EXPORTS_NOT_FROZEN |