int ListMgr_Get( lmgr_t * p_mgr, const entry_id_t * p_id, attr_set_t * p_info ) { int rc; DEF_PK(pk); entry_id2pk(p_id, PTR_PK(pk)); retry: rc = listmgr_get_by_pk(p_mgr, pk, p_info); if (lmgr_delayed_retry(p_mgr, rc)) goto retry; return rc; }
int ListMgr_Get( lmgr_t * p_mgr, const entry_id_t * p_id, attr_set_t * p_info ) { int rc; DEF_PK(pk); int retry_status; entry_id2pk(p_id, PTR_PK(pk)); retry: rc = listmgr_get_by_pk(p_mgr, pk, p_info); retry_status = lmgr_delayed_retry(p_mgr, rc); if (retry_status == 1) goto retry; else if (retry_status == 2) rc = DB_RBH_SIG_SHUTDOWN; return rc; }
int ListMgr_GetNext( struct lmgr_iterator_t *p_iter, entry_id_t * p_id, attr_set_t * p_info ) { int rc = 0; char *idstr; DEF_PK(pk); int entry_disappeared = FALSE; do { entry_disappeared = FALSE; rc = db_next_record( &p_iter->p_mgr->conn, &p_iter->select_result, &idstr, 1 ); if ( rc ) return rc; if ( idstr == NULL ) return DB_REQUEST_FAILED; if ( sscanf( idstr, SPK, PTR_PK(pk) ) != 1 ) return DB_REQUEST_FAILED; /* retrieve entry id (except validator) */ rc = pk2entry_id( p_iter->p_mgr, pk, p_id ); /* /!\ If the entry disappeared from DB, we must go to next record */ if ( rc == DB_NOT_EXISTS ) entry_disappeared = TRUE; else if ( rc ) return rc; /* Idem */ rc = listmgr_get_by_pk( p_iter->p_mgr, pk, p_info ); if ( rc == DB_NOT_EXISTS ) entry_disappeared = TRUE; } while ( entry_disappeared ); /* goto next record if entry desappered */ return rc; }