int ServiceManager::registerService(waServiceFactory *service, GUID owner) { ASSERT(owner != INVALID_GUID); if (owner == INVALID_GUID) return 0; GUID svctype = GetServiceTypeL(service); cs.enter(); if (!services.multiHaveItem(svctype, service)) { services.multiAddItem(svctype, service); ownermap.addItem(service, owner); GUID svcguid = service->getGuid(); if (svcguid != INVALID_GUID) services_by_guid.addItem(svcguid, service); } cs.leave(); service->serviceNotify(SvcNotify::ONREGISTERED); #ifdef WASABI_COMPILE_SYSCB CallbackManager::issueCallback(SysCallback::SERVICE, SvcCallback::ONREGISTER, reinterpret_cast<long>(&svctype), reinterpret_cast<long>(service)); #endif return 1; }
int ServiceManager::deregisterService(waServiceFactory *service, int internal) { GUID svctype = GetServiceTypeL(service); // make sure it was there cs.enter(); if (services.multiHaveItem(svctype, service)) { // make sure there aren't still services issued by this guy // ASSERT(internal || !lockmap.reverseGetItem(service)); services.multiDelItem(svctype, service); ownermap.delItem(service); services_by_guid.reverseDelItem(service); } cs.leave(); service->serviceNotify(SvcNotify::ONDEREGISTERED); #ifdef WASABI_COMPILE_SYSCB CallbackManager::issueCallback(SysCallback::SERVICE, SvcCallback::ONDEREGISTER, reinterpret_cast<long>(&svctype), reinterpret_cast<long>(service)); #endif return 1; }
int ServiceManager::isValidService(GUID svctype, waServiceFactory *service) { INCRITICALSECTION(cs); return services.multiHaveItem(svctype, service); }