lio_service_manager_t *lio_exnode_service_set_create() { lio_service_manager_t *ess; ess = create_service_manager(); //** Install the drivers add_service(ess, SEG_SM_LOAD, SEGMENT_TYPE_LINEAR, segment_linear_load); add_service(ess, SEG_SM_CREATE, SEGMENT_TYPE_LINEAR, segment_linear_create); add_service(ess, SEG_SM_LOAD, SEGMENT_TYPE_FILE, segment_file_load); add_service(ess, SEG_SM_CREATE, SEGMENT_TYPE_FILE, segment_file_create); add_service(ess, SEG_SM_LOAD, SEGMENT_TYPE_CACHE, segment_cache_load); add_service(ess, SEG_SM_CREATE, SEGMENT_TYPE_CACHE, segment_cache_create); add_service(ess, SEG_SM_LOAD, SEGMENT_TYPE_LUN, segment_lun_load); add_service(ess, SEG_SM_CREATE, SEGMENT_TYPE_LUN, segment_lun_create); add_service(ess, SEG_SM_LOAD, SEGMENT_TYPE_JERASURE, segment_jerasure_load); add_service(ess, SEG_SM_CREATE, SEGMENT_TYPE_JERASURE, segment_jerasure_create); add_service(ess, SEG_SM_LOAD, SEGMENT_TYPE_LOG, segment_log_load); add_service(ess, SEG_SM_CREATE, SEGMENT_TYPE_LOG, segment_log_create); add_service(ess, RS_SM_AVAILABLE, RS_TYPE_SIMPLE, rs_simple_create); add_service(ess, RS_SM_AVAILABLE, RS_TYPE_REMOTE_CLIENT, rs_remote_client_create); add_service(ess, RS_SM_AVAILABLE, RS_TYPE_REMOTE_SERVER, rs_remote_server_create); add_service(ess, DS_SM_AVAILABLE, DS_TYPE_IBP, ds_ibp_create); add_service(ess, OS_AVAILABLE, OS_TYPE_FILE, object_service_file_create); add_service(ess, OS_AVAILABLE, OS_TYPE_REMOTE_CLIENT, object_service_remote_client_create); add_service(ess, OS_AVAILABLE, OS_TYPE_REMOTE_SERVER, object_service_remote_server_create); add_service(ess, OS_AVAILABLE, OS_TYPE_TIMECACHE, object_service_timecache_create); add_service(ess, AUTHN_AVAILABLE, AUTHN_TYPE_FAKE, authn_fake_create); add_service(ess, OSAZ_AVAILABLE, OSAZ_TYPE_FAKE, osaz_fake_create); add_service(ess, CACHE_LOAD_AVAILABLE, CACHE_TYPE_AMP, amp_cache_load); add_service(ess, CACHE_CREATE_AVAILABLE, CACHE_TYPE_AMP, amp_cache_create); add_service(ess, CACHE_LOAD_AVAILABLE, CACHE_TYPE_ROUND_ROBIN, round_robin_cache_load); add_service(ess, CACHE_CREATE_AVAILABLE, CACHE_TYPE_ROUND_ROBIN, round_robin_cache_create); return(ess); }
service_manager_t *clone_service_manager(service_manager_t *sm) { apr_ssize_t klen; service_manager_t *clone; apr_hash_index_t *his; apr_hash_t *section, *clone_section; char *key; //** Make an empty SM clone = create_service_manager(sm); //** Now cycle through all the tables and copy them apr_thread_mutex_lock(sm->lock); for (his = apr_hash_first(NULL, sm->table); his != NULL; his = apr_hash_next(his)) { apr_hash_this(his, (const void **)&key, &klen, (void **)§ion); clone_section = apr_hash_copy(clone->pool, section); apr_hash_set(clone->table, apr_pstrdup(clone->pool, key), APR_HASH_KEY_STRING, clone_section); } apr_thread_mutex_unlock(sm->lock); return(clone); }