int _cfw_register_service(service_t * svc) { pr_debug(LOG_MODULE_MAIN, "%s: %p id:%d port: %d\n", __func__, svc, svc->service_id, svc->port_id); int flags = interrupt_lock(); if (_find_service(svc->service_id) != -1) { interrupt_unlock(flags); pr_error(LOG_MODULE_MAIN, "Error: service %d already registered\n", svc->service_id); return -1; } _add_service(svc); notify_service_avail(svc->service_id); interrupt_unlock(flags); return 0; }
int64_t ServiceManager::loadService(const char* path, const int64_t id_srv, const int64_t id_beg, const int64_t id_end, const int64_t alg_type){ if(!path) return -1; if(!_can_load_service(id_srv)){ WARN("loading service %s failed, service id %lld, begin id %lld, end id %lld, algrithm %lld, reason is already exist or unloading", path, (long long)id_srv, (long long)id_beg, (long long)id_end, (long long)alg_type); return -1; } OPH(); INFO("loading service %s, service id %lld, begin id %lld, end id %lld, algrithm %lld", path, (long long)id_srv, (long long)id_beg, (long long)id_end, (long long)alg_type); if(0==id_srv && 0==id_end && 0==id_beg){ if(Service* service =_load_service(0, path)){ if(_add_service(service)){ service->release(); // set service id range const int64_t id =service->getId(); RangeId* service_id =SafeNew<RangeId>(); service_id->setRange(id, id+1); service_id->setAlgrithm(alg_type); _set_service_id(id, service_id); return id; } else{ service->unload(); service->release(); return -1; } } else{ return -1; } } else if(id_srv>0 && id_beg>0 && id_beg<id_end){ bool ok =true; for(int64_t id=id_beg; id<id_end; ++id){ if(Service* service =_load_service(id, path)){ if(_add_service(service)){ service->release(); } else{ service->unload(); service->release(); ok =false; break; } } else{ ok =false; break; } } RangeId* service_id =SafeNew<RangeId>(); service_id->setRange(id_beg, id_end); service_id->setAlgrithm(alg_type); _set_service_id(id_srv, service_id); if(ok){ return id_beg; } else{ unloadService(id_beg); return -1; } } else{ ERROR("load service failed, id invalid"); return -1; } }