/* OpenManager * duplicate reference to manager * NB - returned reference must be released */ LIB_EXPORT rc_t CC VTableOpenManagerUpdate ( VTable *self, struct VDBManager **mgr ) { rc_t rc; if ( mgr == NULL ) rc = RC ( rcVDB, rcTable, rcAccessing, rcParam, rcNull ); else { if ( self == NULL ) rc = RC ( rcVDB, rcTable, rcAccessing, rcSelf, rcNull ); else { rc = VDBManagerAddRef ( self -> mgr ); if ( rc == 0 ) { * mgr = self -> mgr; return 0; } } * mgr = NULL; } return rc; }
LIB_EXPORT rc_t CC RefSeqMgr_Make( const RefSeqMgr** cself, const VDBManager* vmgr, uint32_t reader_options, size_t cache, uint32_t keep_open_num ) { rc_t rc = 0; RefSeqMgr* obj = NULL; if ( cself == NULL || vmgr == NULL ) { rc = RC( rcAlign, rcIndex, rcConstructing, rcParam, rcNull ); } else { obj = calloc( 1, sizeof( *obj ) ); if ( obj == NULL ) { rc = RC( rcAlign, rcIndex, rcConstructing, rcMemory, rcExhausted ); } else { rc = KConfigMake( &obj->kfg, NULL ); if ( rc == 0 ) { rc = VDBManagerAddRef( vmgr ); if ( rc == 0 ) { obj->vmgr = vmgr; obj->cache = cache; obj->num_open_max = keep_open_num; obj->reader_options = reader_options; } } } } if ( rc == 0 ) { *cself = obj; /* ALIGN_DBG( "max_open: %u", obj->num_open_max ); */ } else { RefSeqMgr_Release( obj ); ALIGN_DBGERR( rc ); } return rc; }
/* SetVDBManager * remember the manager in use */ LIB_EXPORT rc_t CC ReportSetVDBManager(const VDBManager *mgr) { rc_t rc = 0; Report* self = NULL; ReportGet(&self); if ( self != NULL ) { rc = VDBManagerAddRef ( mgr ); if ( rc == 0 ) { rc = VDBManagerRelease ( self -> mgr ); if ( rc != 0 ) VDBManagerRelease ( mgr ); else self -> mgr = mgr; } } return rc; }