コード例 #1
0
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;
}
コード例 #2
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;
		}
	}