Bool16 QTSServer::AddModule(QTSSModule* inModule) { Assert(inModule->IsInitialized()); // Prepare to invoke the module's Register role. Setup the Register param block QTSS_ModuleState theModuleState; theModuleState.curModule = inModule; theModuleState.curRole = QTSS_Register_Role; theModuleState.curTask = NULL; OSThread::SetMainThreadData(&theModuleState); // Currently we do nothing with the module name QTSS_RoleParams theRegParams; theRegParams.regParams.outModuleName[0] = 0; // If the module returns an error from the QTSS_Register role, don't put it anywhere if (inModule->CallDispatch(QTSS_Register_Role, &theRegParams) != QTSS_NoErr) return false; OSThread::SetMainThreadData(NULL); // // Update the module name to reflect what was returned from the register role theRegParams.regParams.outModuleName[QTSS_MAX_MODULE_NAME_LENGTH - 1] = 0; if (theRegParams.regParams.outModuleName[0] != 0) inModule->SetValue(qtssModName, 0, theRegParams.regParams.outModuleName, ::strlen(theRegParams.regParams.outModuleName), false); // // Give the module object a prefs dictionary. Instance attributes are allowed for these objects. QTSSPrefs* thePrefs = NEW QTSSPrefs( sPrefsSource, inModule->GetValue(qtssModName), QTSSDictionaryMap::GetMap(QTSSDictionaryMap::kModulePrefsDictIndex), true); thePrefs->RereadPreferences(); inModule->SetPrefsDict(thePrefs); // // Add this module to the array of module (dictionaries) UInt32 theNumModules = this->GetNumValues(qtssSvrModuleObjects); QTSS_Error theErr = this->SetValue(qtssSvrModuleObjects, theNumModules, &inModule, sizeof(QTSSModule*), QTSSDictionary::kDontObeyReadOnly); Assert(theErr == QTSS_NoErr); // // Add this module to the module queue sModuleQueue.EnQueue(inModule->GetQueueElem()); return true; }
QTSSDictionary* QTSSPrefs::CreateNewDictionary(QTSSDictionaryMap* inMap, OSMutex* /* inMutex */) { return NEW QTSSPrefs(fPrefsSource, NULL, inMap, true, this ); }