From: Peter Howkins Date: Thu, 28 Jun 2018 23:43:46 +0000 (+0100) Subject: libDtSearch: NO_TRANS is always on for CDE X-Git-Tag: 2.3.0a~286 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=550f278889606e7feccfeb801809a5c2b7146682;p=oweals%2Fcde.git libDtSearch: NO_TRANS is always on for CDE --- diff --git a/cde/lib/DtSearch/raima/dblfcns.c b/cde/lib/DtSearch/raima/dblfcns.c index ac229037..18481072 100644 --- a/cde/lib/DtSearch/raima/dblfcns.c +++ b/cde/lib/DtSearch/raima/dblfcns.c @@ -191,20 +191,7 @@ int db_txtest = 0; /* transaction commit failure testing flag */ #define FL_LIST_ACCESS(ld_ptr) (FILE_NO *)(ld_ptr)->fl_list.ptr #define FL_LIST_DEACCESS(ld_ptr) /**/ -#ifndef NO_TRANS -#ifndef SINGLE_USER -int rlb_status; -static char type[5]; /* open type (s or x) */ -#endif -#endif -#ifndef NO_TRANS -#ifndef GENERAL -/* transaction activity file info */ -extern INT taf_count; -extern char taf_files[TAFLIMIT][FILENMLEN]; -#endif -#endif /* Internal function prototypes */ #ifndef SINGLE_USER @@ -225,49 +212,8 @@ static int recovery_check(P0); -#ifndef NO_TRANS -/* Set the number of lock request retries -*/ -d_retries(num TASK_PARM) -int num; -TASK_DECL -{ - DB_ENTER(NO_DB_ID TASK_ID LOCK_SET(LOCK_NONE)); - -#ifndef SINGLE_USER - lock_tries = num; -#endif - RETURN( db_status = S_OKAY ); -} -#endif - -#ifndef NO_TRANS -/* Set the lock request timeout value -*/ -d_timeout(secs TASK_PARM) -int secs; -TASK_DECL -{ -#ifdef SINGLE_USER - return(db_status = S_OKAY); -#else - LM_SETTIME sto; /* send timeout packet */ - DB_ENTER(NO_DB_ID TASK_ID LOCK_SET(LOCK_ALL)); - if ( !dbopen ) RETURN( dberr(S_DBOPEN) ); - - if ( dbopen == 1 ) { - sto.fcn = L_SETTIME; - sto.secs = secs; - if ( nw_send(lsn, (MESSAGE *)&sto, sizeof(LM_SETTIME)) ) - RETURN( neterr() ); - db_timeout = secs; - } - RETURN( db_status = S_OKAY ); -#endif -} -#endif /* Open db_VISTA database @@ -323,13 +269,6 @@ TASK_DECL #endif #endif -#ifndef NO_TRANS -#ifndef GENERAL - /* open transaction activity file */ - if ( taf_open() != S_OKAY ) - RETURN( db_status ); -#endif -#endif /* initialize multi-db tables */ if ( initdbt(dbnames) != S_OKAY ) RETURN( db_status ); @@ -378,15 +317,6 @@ TASK_DECL if ( recovery_check() != S_OKAY ) RETURN(db_status); #endif #else -#ifndef NO_TRANS - /* [713] perform external recovery in single-user mode */ - if ( recovery_check() != S_OKAY ) RETURN(db_status); -#endif -#endif -#ifndef NO_TRANS - if ( use_ovfl ) { - if ( o_setup() != S_OKAY ) RETURN( db_status ); - } #endif #ifdef DEBUG_DBLF @@ -426,11 +356,7 @@ TASK *tsk; tsk->Db_timeout = TIMEOUT_DEF; tsk->Db_lockmgr = 1; #endif -#ifndef NO_TRANS - tsk->Dboptions = DCHAINUSE | TRLOGGING; -#else tsk->Dboptions = DCHAINUSE; -#endif return( db_status ); } @@ -512,56 +438,6 @@ const char *dbnames; -#ifndef NO_TRANS -/* Check for possible recovery -*/ -static recovery_check() -{ -#ifndef SINGLE_USER - LM_TREND trend_pkt; -#ifndef GENERAL - int tn; /* transaction number */ - int tc; /* transaction count */ -#endif -#endif - -#ifndef GENERAL - /* open tr activity file */ - if ( taf_access() == S_OKAY ) { - taf_release(); -#endif -#ifdef SINGLE_USER - if (taf_count != 0) { - if (d_recover(taf_files[0] CURRTASK_PARM) != S_OKAY) - return( db_status ); - taf_count = 0; - } -#else -#ifndef GENERAL - if ( tc = taf_count ) { - /* perform recovery on each file */ - for ( tn = 0; tn < tc; ++tn ) { - if ( d_recover(taf_files[0] CURRTASK_PARM) != S_OKAY ) return( db_status ); - } - taf_count = 0; - } -#endif -#endif -#ifndef GENERAL - } -#endif -#ifndef SINGLE_USER - if ( db_lockmgr ) { - /* tell lock manager that we're done */ - trend_pkt.fcn = L_RECDONE; - if ( nw_send(lsn, (MESSAGE *)&trend_pkt, sizeof(LM_TREND)) ) - neterr(); - } -#endif - - return( db_status ); -} -#endif @@ -699,188 +575,6 @@ send_open: } #endif -#ifndef NO_TRANS -/* Build application file lock tables -*/ -static int bld_lock_tables() -{ -#ifndef SINGLE_USER - int fd_lc; /* loop control */ - int st_lc; /* loop control */ - INT_P File_used; -#define file_used File_used.ptr - int rec; - int mem, memtot; - FILE_NO i; - FILE_NO fl_cnt; - struct lock_descr *ld_ptr; - RECORD_ENTRY *rec_ptr; - FIELD_ENTRY *fld_ptr; - SET_ENTRY *set_ptr; - MEMBER_ENTRY *mem_ptr; - int *fu_ptr; - FILE_NO *fl_ptr; - unsigned new_size; - unsigned old_size; - int old_keyl_cnt; - - old_size = old_size_ft*sizeof(int); - new_size = size_ft*sizeof(int); - File_used.ptr = NULL; - /* Macro references must be on one line for some compilers */ - if ((ALLOC_TABLE(&db_global.App_locks, new_size, old_size, "app_locks") - != S_OKAY) || - (ALLOC_TABLE(&db_global.Excl_locks, new_size, old_size, "excl_locks") - != S_OKAY) || - (ALLOC_TABLE(&db_global.Kept_locks, new_size, old_size, "kept_locks") - != S_OKAY) || - (ALLOC_TABLE(&File_used, new_size, old_size, "file_used") - != S_OKAY)) { - return( db_status ); - } - - old_size = old_size_rt * sizeof(struct lock_descr); - new_size = size_rt * sizeof(struct lock_descr); - if ((ALLOC_TABLE(&db_global.Rec_locks, new_size, old_size, "rec_locks") - != S_OKAY)) { - return( db_status ); - } - - if ( size_st ) { - new_size = size_st * sizeof(struct lock_descr); - old_size = old_size_st * sizeof(struct lock_descr); - /* Macro references must be on one line for some compilers */ - if (ALLOC_TABLE(&db_global.Set_locks, new_size, old_size, "set_locks") - != S_OKAY ) { - return( db_status ); - } - } - - /* build rec_locks table */ - for (rec = old_size_rt, rec_ptr = &record_table[old_size_rt], - ld_ptr = rec_locks; - rec < size_rt; - ++rec, ++rec_ptr, ++ld_ptr) { - ld_ptr->fl_type = 'f'; - ld_ptr->fl_prev = 'f'; /*[367] init to free */ - ld_ptr->fl_kept = FALSE; - - /* put record's data file in list */ - file_used[rec_ptr->rt_file] = TRUE; - - /* add any key files to list */ - fl_cnt = 1; /* count of used files */ - for (fd_lc = size_fd - rec_ptr->rt_fields, - fld_ptr = &field_table[rec_ptr->rt_fields]; - (--fd_lc >= 0) && (fld_ptr->fd_rec == rec); - ++fld_ptr) { - if ( fld_ptr->fd_key != NOKEY ) { - fu_ptr = &file_used[fld_ptr->fd_keyfile]; - if (!*fu_ptr) { - *fu_ptr = TRUE; - ++fl_cnt; - } - } - } - ld_ptr->fl_cnt = fl_cnt; - ld_ptr->fl_list.ptr = - /* Macro references must be on one line for some compilers */ - (FILE_NO *)ALLOC(&ld_ptr->fl_list, fl_cnt*sizeof(FILE_NO), db_avname); - if ( ld_ptr->fl_list.ptr == NULL ) return( dberr(S_NOMEMORY) ); - fl_ptr = ld_ptr->fl_list.ptr; - for (i = 0, fu_ptr = file_used; i < size_ft; ++i, ++fu_ptr) { - if (*fu_ptr) { - *fu_ptr = FALSE; - *fl_ptr++ = i; - } - } - FL_LIST_DEACCESS(ld_ptr); - } - /* build set_locks table */ - if ( size_st ) { - for (st_lc = size_st - old_size_st, set_ptr = &set_table[old_size_st], - ld_ptr = set_locks; - --st_lc >= 0; ++set_ptr, ++ld_ptr) { - /* add owner's data file */ - file_used[record_table[set_ptr->st_own_rt].rt_file] = TRUE; - ld_ptr->fl_type = 'f'; - ld_ptr->fl_prev = 'f'; /*[367] init to free */ - ld_ptr->fl_kept = FALSE; - - /* add member record data files to list */ - fl_cnt = 1; /* count of used files */ - for (mem = set_ptr->st_members, memtot = mem + set_ptr->st_memtot, - mem_ptr = &member_table[mem]; - mem < memtot; - ++mem, ++mem_ptr) { - fu_ptr = &file_used[record_table[mem_ptr->mt_record].rt_file]; - if (!*fu_ptr) { - *fu_ptr = TRUE; - ++fl_cnt; - } - } - ld_ptr->fl_cnt = fl_cnt; - ld_ptr->fl_list.ptr = - /* Macro references must be on one line for some compilers */ - (FILE_NO *)ALLOC(&ld_ptr->fl_list, fl_cnt*sizeof(FILE_NO), db_avname); - if ( ld_ptr->fl_list.ptr == NULL ) return( dberr(S_NOMEMORY) ); - fl_ptr = ld_ptr->fl_list.ptr; - for (i = 0, fu_ptr = file_used; i < size_ft; ++i, ++fu_ptr) { - if (*fu_ptr) { - *fu_ptr = FALSE; - *fl_ptr++ = i; - } - } - FL_LIST_DEACCESS(ld_ptr); - } - } - /* build key_locks table */ - keyl_cnt = 0; - old_keyl_cnt = keyl_cnt; - for (fd_lc = size_fd - old_size_fd, fld_ptr = &field_table[old_size_fd]; - --fd_lc >= 0; ++fld_ptr) { - /* count number of keys */ - if (fld_ptr->fd_key != NOKEY) - ++keyl_cnt; - } - if ( keyl_cnt ) { - old_size = old_keyl_cnt*sizeof(struct lock_descr); - new_size = keyl_cnt*sizeof(struct lock_descr); - /* Macro references must be on one line for some compilers */ - if (ALLOC_TABLE(&db_global.Key_locks, new_size, old_size, "key_locks") - != S_OKAY) { - return( db_status ); - } - for (fd_lc = size_fd - old_size_fd, fld_ptr = &field_table[old_size_fd], - ld_ptr = key_locks; - --fd_lc >= 0; ++fld_ptr) { - if (fld_ptr->fd_key != NOKEY) { - ld_ptr->fl_type = 'f'; - ld_ptr->fl_prev = 'f'; /*[367] init to free */ - ld_ptr->fl_kept = FALSE; - ld_ptr->fl_cnt = 1; - ld_ptr->fl_list.ptr = (FILE_NO *)ALLOC(&ld_ptr->fl_list, ld_ptr->fl_cnt*sizeof(FILE_NO), "fl_list"); - if ( ld_ptr->fl_list.ptr == NULL ) return( dberr(S_NOMEMORY) ); - *(ld_ptr->fl_list.ptr) = fld_ptr->fd_keyfile; - FL_LIST_DEACCESS(ld_ptr); - ++ld_ptr; - } - } - } - lp_size = sizeof(LM_LOCK) + (size_ft-1)*sizeof(LM_LOCKREQ); - fp_size = sizeof(LM_FREE) + (size_ft-1)*sizeof(INT); - lock_pkt = (LM_LOCK *)ALLOC(&db_global.Lock_pkt, lp_size, "lock_pkt"); - free_pkt = (LM_FREE *)ALLOC(&db_global.Free_pkt, fp_size, "free_pkt"); - if ( !lock_pkt || !free_pkt ) return( dberr(S_NOMEMORY) ); - lock_pkt->fcn = L_LOCK; - free_pkt->fcn = L_FREE; - MEM_UNLOCK(&File_used); - FREE(&File_used); -#endif - - return( db_status = S_OKAY ); -} -#endif /****************************************/ @@ -900,15 +594,6 @@ TASK_DECL if ( dbopen ) { db_status = S_OKAY; -#ifndef NO_TRANS - /* in case they forgot to end the transaction */ - if ( trans_id ) - d_trabort(TASK_ONLY); - else -#ifndef SINGLE_USER - if ( dbopen >= 2 ) -#endif -#endif dio_flush(); for (i = 0; i < size_ft; ++i) { @@ -924,17 +609,9 @@ TASK_DECL #endif #endif -#ifndef NO_TRANS -#ifndef GENERAL - taf_close(); -#endif -#endif #ifndef SINGLE_USER d_freeall(TASK_ONLY); #endif -#ifndef NO_TRANS - if ( use_ovfl ) o_free(); -#endif /* termfree(); key_close(); sk_free(); @@ -957,12 +634,6 @@ TASK_DECL dbwait_time = 1; db_lockmgr = 1; session_active = FALSE; -#endif -#ifndef NO_TRANS - cache_ovfl = FALSE; - ov_initaddr = 0L; - ov_rootaddr = 0L; - ov_nextaddr = 0L; #endif db_status = S_OKAY; curr_rec = NULL_DBA; @@ -1135,266 +806,13 @@ void termfree() } } -#ifndef NO_TRANS -/* Establish record file locks -*/ -d_reclock(rec, lock_type TASK_PARM DBN_PARM) -int rec; -char *lock_type; -TASK_DECL -DBN_DECL -{ -#ifdef SINGLE_USER - return(db_status = S_OKAY); -#else - LOCK_REQUEST lr; - - DB_ENTER(DB_ID TASK_ID LOCK_SET(LOCK_IO)); - - lr.item = rec; - lr.type = *lock_type; - - RETURN( d_lock(1, &lr TASK_PARM DBN_PARM) ); -#endif -} -#endif - - -#ifndef NO_TRANS -/* Establish set file locks -*/ -d_setlock(set, lock_type TASK_PARM DBN_PARM) -int set; -char *lock_type; -TASK_DECL -DBN_DECL -{ -#ifdef SINGLE_USER - return (db_status = S_OKAY); -#else - LOCK_REQUEST lr; - - DB_ENTER(DB_ID TASK_ID LOCK_SET(LOCK_IO)); - - lr.item = set; - lr.type = *lock_type; - - RETURN( d_lock(1, &lr TASK_PARM DBN_PARM) ); -#endif -} -#endif - -#ifndef NO_TRANS -/* Lock key file -*/ -d_keylock(key, lock_type TASK_PARM DBN_PARM) -long key; /* field number of key */ -char *lock_type; -TASK_DECL -DBN_DECL -{ -#ifdef SINGLE_USER - return (db_status = S_OKAY); -#else - int fld, rec; - LOCK_REQUEST lr; - RECORD_ENTRY *rec_ptr; - FIELD_ENTRY *fld_ptr; - - DB_ENTER(DB_ID TASK_ID LOCK_SET(LOCK_IO)); - - if (nfld_check(key, &rec, &fld, (RECORD_ENTRY * *)&rec_ptr, (FIELD_ENTRY * *)&fld_ptr) != S_OKAY) - RETURN( db_status ); - - if (fld_ptr->fd_key == NOKEY) - RETURN( dberr(S_NOTKEY) ); - - /* KEYMARK allows 'fld' to be recognized as a key file. It is already - adjusted (in nfld_check) to INTernal format. Don't play with it in - d_lock and lock_files. - */ - lr.item = fld + KEYMARK; - lr.type = *lock_type; - - RETURN( d_lock(1, &lr TASK_PARM DBN_PARM) ); -#endif -} -#endif - -#ifndef NO_TRANS -/* Return lock status for record type -*/ -d_reclstat(rec, lstat TASK_PARM DBN_PARM) -int rec; -char *lstat; -TASK_DECL -DBN_DECL -{ -#ifdef SINGLE_USER - *lstat = 'f'; - return( db_status = S_OKAY ); -#else - RECORD_ENTRY *rec_ptr; - - DB_ENTER(DB_ID TASK_ID LOCK_SET(LOCK_NOIO)); - - if (nrec_check(rec, &rec, (RECORD_ENTRY * *)&rec_ptr) != S_OKAY) - RETURN( db_status ); - - if ( dbopen >= 2 ) - *lstat = 'f'; - else { - if (rec_ptr->rt_flags & STATIC) - *lstat = 's'; - else - *lstat = rec_locks[rec].fl_type; - } - RETURN( db_status = S_OKAY ); -#endif -} -#endif - -#ifndef NO_TRANS -/* Return lock status for set type -*/ -d_setlstat(set, lstat TASK_PARM DBN_PARM) -int set; -char *lstat; -TASK_DECL -DBN_DECL -{ -#ifdef SINGLE_USER - *lstat = 'f'; - return (db_status = S_OKAY); -#else - SET_ENTRY *set_ptr; - - DB_ENTER(DB_ID TASK_ID LOCK_SET(LOCK_NOIO)); - - if (nset_check(set, &set, (SET_ENTRY * *)&set_ptr) != S_OKAY) - RETURN( db_status ); - - if ( dbopen >= 2 ) - *lstat = 'f'; - else - *lstat = set_locks[set].fl_type; - - RETURN( db_status = S_OKAY ); -#endif -} -#endif - -#ifndef NO_TRANS -/* Return lock status for key type -*/ -d_keylstat(key, lstat TASK_PARM DBN_PARM) -long key; -char *lstat; -TASK_DECL -DBN_DECL -{ -#ifdef SINGLE_USER - *lstat = 'f'; - return (db_status = S_OKAY); -#else - int fld, rec; - RECORD_ENTRY *rec_ptr; - FIELD_ENTRY *fld_ptr; - DB_ENTER(DB_ID TASK_ID LOCK_SET(LOCK_NOIO)); - if (nfld_check(key, &rec, &fld, (RECORD_ENTRY * *)&rec_ptr, (FIELD_ENTRY * *)&fld_ptr) != S_OKAY) - RETURN( db_status ); - if (fld_ptr->fd_key == NOKEY) - RETURN( dberr(S_NOTKEY) ); - if ( dbopen >= 2 ) - *lstat = 'f'; - else { - if ( file_table[fld_ptr->fd_keyfile].ft_flags & STATIC ) - *lstat = 's'; - else - *lstat = key_locks[fld_ptr->fd_keyno].fl_type; - } - RETURN( db_status = S_OKAY ); -#endif -} -#endif - -#ifndef NO_TRANS -/* Lock a group of records and/or sets -*/ -d_lock(count, lrpkt TASK_PARM DBN_PARM) -int count; -LOCK_REQUEST *lrpkt; -TASK_DECL -DBN_DECL -{ -#ifdef SINGLE_USER - return (db_status = S_OKAY); -#else - int item; - int i; - LOCK_REQUEST *lrpkt_ptr; - struct lock_descr *ld_ptr; - DB_ENTER(DB_ID TASK_ID LOCK_SET(LOCK_IO)); - if ( dbopen >= 2 ) - RETURN( db_status = S_OKAY ); - lock_pkt->nfiles = 0; - for (i = 0, lrpkt_ptr = lrpkt; - (db_status == S_OKAY) && (i < count); - ++i, ++lrpkt_ptr) { - if ( lrpkt_ptr->item >= KEYMARK ) { - /* do not adjust lrpkt->item (see comment in d_keylock) */ - item = field_table[lrpkt_ptr->item - KEYMARK].fd_keyno; - process_lock(&key_locks[item], lrpkt_ptr->type); - } - else if ( lrpkt_ptr->item >= SETMARK ) { - item = NUM2INT(lrpkt_ptr->item - SETMARK, st_offset); - process_lock(&set_locks[item], lrpkt_ptr->type); - } - else if ( lrpkt_ptr->item >= RECMARK ) { - item = NUM2INT(lrpkt_ptr->item - RECMARK, rt_offset); - if ( record_table[item].rt_flags & STATIC ) - dberr(S_STATIC); - else - process_lock(&rec_locks[item], lrpkt_ptr->type); - } - else - dberr( S_INVNUM ); - } - if ( db_status == S_OKAY ) - lock_files(count, lrpkt); - - if ( db_status != S_OKAY ) { - /* reset lock descriptor tables to previous state */ - for (i = 0, lrpkt_ptr = lrpkt; i < count; ++i, ++lrpkt_ptr) { - /* do not adjust lrpkt->item (see comment in d_keylock) */ - if ( lrpkt_ptr->item >= KEYMARK ) { - item = field_table[lrpkt_ptr->item - KEYMARK].fd_keyno; - ld_ptr = &key_locks[item]; - } - else if ( lrpkt_ptr->item >= SETMARK ) { - item = NUM2INT(lrpkt_ptr->item - SETMARK, st_offset); - ld_ptr = &set_locks[item]; - } - else if ( lrpkt_ptr->item >= RECMARK ) { - item = NUM2INT(lrpkt_ptr->item - RECMARK, rt_offset); - ld_ptr = &rec_locks[item]; - } - else - continue; - ld_ptr->fl_type = ld_ptr->fl_prev; - } - } - RETURN( db_status ); -#endif -} -#endif #ifndef SINGLE_USER @@ -1475,191 +893,10 @@ char type; #endif -#ifndef NO_TRANS -/* Lock database files -*/ -static lock_files(count, lrpkt ) -int count; -LOCK_REQUEST *lrpkt; -{ -#ifndef SINGLE_USER - int fl_lc; /* loop control */ - struct lock_descr *ld_ptr; - FILE_NO fno; - int item; - int l; - LOCK_REQUEST *lrpkt_ptr; - int *appl_ptr, *excl_ptr; - FILE_NO *fl_ptr; - - lock_reply.status = L_OKAY; - if ( lock_pkt->nfiles == 0 ) goto skip_send; - - if ( send_lock() != S_OKAY ) - return( db_status ); - -skip_send: - switch ( lock_reply.status ) { - case L_OKAY: - /* update app_locks and excl_lock tables */ - for (l = 0, lrpkt_ptr = lrpkt; l < count; ++l, ++lrpkt_ptr) { - if (lrpkt_ptr->type == 'k') - continue; /* skip keep lock requests */ - /* process each record/set lock */ - /* do not adjust lrpkt->item (see comment in d_keylock) */ - if ( lrpkt_ptr->item >= KEYMARK ) { - item = field_table[lrpkt_ptr->item - KEYMARK].fd_keyno; - ld_ptr = &key_locks[item]; - } - else if ( lrpkt_ptr->item >= SETMARK ) { - item = NUM2INT(lrpkt_ptr->item - SETMARK, st_offset); - ld_ptr = &set_locks[item]; - } - else { - item = NUM2INT(lrpkt_ptr->item - RECMARK, rt_offset); - ld_ptr = &rec_locks[item]; - } - for (fl_lc = ld_ptr->fl_cnt, fl_ptr = FL_LIST_ACCESS(ld_ptr); - --fl_lc >= 0; ++fl_ptr) { - /* process each file for each record/set lock */ - fno = *fl_ptr; - appl_ptr = &app_locks[fno]; - excl_ptr = &excl_locks[fno]; - if ( !*appl_ptr && !*excl_ptr ) { - /* clear file's pages from cache */ - dio_clrfile(fno); - } - if ( ld_ptr->fl_type == 'r' ) { - if ( *appl_ptr >= 0 ) - /* increment if file free or read-locked */ - ++*appl_ptr; - } - else { - if ( ld_ptr->fl_type == 'w' ) - *appl_ptr = -1; - else if ( ld_ptr->fl_type == 'x' ) { - ++*excl_ptr; - if ( ld_ptr->fl_prev == 'r' ) { - /* read to excl lock upgrade */ - --*appl_ptr; - } - } - } - } - FL_LIST_DEACCESS(ld_ptr); - } - break; - case L_UNAVAIL: - case L_TIMEOUT: - return( db_status = S_UNAVAIL ); - default: - return( dberr(S_SYSERR) ); - } -#endif - - return( db_status = S_OKAY ); -} -#endif - -#ifndef NO_TRANS -/* Send lock request -*/ -static int send_lock() -{ -#ifndef SINGLE_USER - LM_TREND trend_pkt; - int send_size, recv_size; - - if ( lock_pkt->nfiles ) { - /* send lock request */ - send_size = sizeof(LM_LOCK) + (lock_pkt->nfiles-1)*sizeof(LM_LOCKREQ); - if ( send_size > lp_size ) - return( dberr(S_SYSERR) ); - -req_locks: -#ifdef MONITOR - printf("nw_send(lsn,lock_pkt->fcn=%ld,size=%d\n",lock_pkt->fcn,send_size); -#endif - if ( nw_send(lsn, (MESSAGE *)lock_pkt, send_size) ) - return( neterr() ); - if ( nw_rcvmsg(lsn, (MESSAGE *)&lock_reply, sizeof(LR_LOCK), &recv_size) ) - return( neterr() ); -#ifdef MONITOR - printf("nw_rcvmsg(lock_reply.fcn=%ld,lock_reply.status=%d\n", - lock_reply.fcn,lock_reply.status); -#endif - /* request must always be granted */ - if ( lock_reply.fcn != L_LOCK ) - return( dberr(S_NETSYNC) ); - if (lock_reply.status == L_RECOVER) { - /* perform auto-recovery */ - d_recover(lock_reply.logfile CURRTASK_PARM); - - /* tell lock mgr we're done */ - trend_pkt.fcn = L_RECDONE; - if (nw_send(lsn, (MESSAGE *)&trend_pkt, sizeof(LM_TREND))) - return( neterr() ); - - /* re-issue lock request */ - goto req_locks; - } - if (lock_reply.status == L_QUEUEFULL) { - sleep(dbwait_time); - goto req_locks; - } - } -#endif - - return( db_status = S_OKAY ); -} -#endif - - -#ifndef NO_TRANS -/* Free key lock -*/ -d_keyfree(key TASK_PARM DBN_PARM) -long key; -TASK_DECL -DBN_DECL -{ -#ifdef SINGLE_USER - return (db_status = S_OKAY); -#else - int fld, rec; - RECORD_ENTRY *rec_ptr; - FIELD_ENTRY *fld_ptr; - struct lock_descr *ld_ptr; - - DB_ENTER(DB_ID TASK_ID LOCK_SET(LOCK_IO)); - - if (nfld_check(key, &rec, &fld, (RECORD_ENTRY * *)&rec_ptr, (FIELD_ENTRY * *)&fld_ptr) != S_OKAY) - RETURN( db_status ); - - if ( fld_ptr->fd_key == NOKEY ) - RETURN( dberr(S_NOTKEY) ); - - if ( dbopen >= 2 ) /* exclusive access needs no locks */ - RETURN( db_status = S_OKAY ); - - ld_ptr = &key_locks[fld_ptr->fd_keyno]; - if ( trans_id ) - RETURN( dberr(S_TRFREE) ); - - if ( ld_ptr->fl_type == 'f' ) - RETURN( dberr(S_NOTLOCKED) ); - - free_files(ld_ptr); - ld_ptr->fl_type = 'f'; - - RETURN( db_status ); -#endif -} -#endif #ifndef SINGLE_USER @@ -1683,81 +920,7 @@ struct lock_descr *ld_ptr; /* Lock descriptor */ } #endif -#ifndef NO_TRANS -/* Free record lock -*/ -d_recfree(rec TASK_PARM DBN_PARM) -int rec; -TASK_DECL -DBN_DECL -{ -#ifdef SINGLE_USER - return (db_status = S_OKAY); -#else - RECORD_ENTRY *rec_ptr; - struct lock_descr *ld_ptr; - - DB_ENTER(DB_ID TASK_ID LOCK_SET(LOCK_IO)); - - if (nrec_check(rec, &rec, (RECORD_ENTRY * *)&rec_ptr) != S_OKAY) - RETURN( db_status ); - - if ( dbopen >= 2 ) /* exclusive access needs no locks */ - RETURN( db_status = S_OKAY ); - - ld_ptr = &rec_locks[rec]; - - if ( trans_id ) - RETURN( dberr(S_TRFREE) ); - - if ( ld_ptr->fl_type == 'f' ) - RETURN( dberr(S_NOTLOCKED) ); - - free_files(ld_ptr); - ld_ptr->fl_type = 'f'; - - RETURN( db_status ); -#endif -} -#endif - -#ifndef NO_TRANS -/* Free set lock -*/ -d_setfree(set TASK_PARM DBN_PARM) -int set; -TASK_DECL -DBN_DECL -{ -#ifdef SINGLE_USER - return (db_status = S_OKAY); -#else - SET_ENTRY *set_ptr; - struct lock_descr *ld_ptr; - - DB_ENTER(DB_ID TASK_ID LOCK_SET(LOCK_IO)); - - if (nset_check(set, &set, (SET_ENTRY * *)&set_ptr) != S_OKAY) - RETURN( db_status ); - - if ( dbopen >= 2 ) /* exclusive access needs no locks */ - RETURN( db_status = S_OKAY ); - - ld_ptr = &set_locks[set]; - - if ( trans_id ) - RETURN( dberr(S_TRFREE) ); - if ( ld_ptr->fl_type == 'f' ) - RETURN( dberr(S_NOTLOCKED) ); - - free_files(ld_ptr); - ld_ptr->fl_type = 'f'; - - RETURN( db_status ); -#endif -} -#endif @@ -1823,53 +986,6 @@ struct lock_descr *ld_ptr; } #endif -#ifndef NO_TRANS -/* free all locked files -*/ -d_freeall(TASK_ONLY) -TASK_DECL -{ -#ifdef SINGLE_USER - return (db_status = S_OKAY); -#else - int i; - FILE_NO *fref_ptr; - int *appl_ptr; - - DB_ENTER(NO_DB_ID TASK_ID LOCK_SET(LOCK_IO)); - - if ( ! dbopen ) RETURN( dberr(S_DBOPEN) ); - - if ( dbopen >= 2 ) /* exclusive access needs no locks */ - RETURN( db_status = S_OKAY ); - - if ( trans_id ) RETURN( dberr(S_TRFREE) ); - - free_pkt->nfiles = 0; - for (i = 0, fref_ptr = file_refs, appl_ptr = app_locks; - i < size_ft; - ++i, ++fref_ptr, ++appl_ptr) { - if (*appl_ptr) { - *appl_ptr = FALSE; - if (!excl_locks[i]) - free_pkt->frefs[free_pkt->nfiles++] = *fref_ptr; - } - } - /* send free files packet */ - if ( send_free() != S_OKAY ) - RETURN( db_status ); - - /* reset all lock descriptors */ - reset_locks(); - - /* reset all key file positions */ - key_reset(size_ft); - - /* Clear cache pages and return */ - RETURN( dio_clear() ); -#endif -} -#endif #ifndef SINGLE_USER @@ -1917,382 +1033,18 @@ static void reset_locks() } #endif -#ifndef NO_TRANS -/* Send free files packet -*/ -static int send_free() -{ -#ifndef SINGLE_USER - int send_size; - /* send any free packets */ - if ( free_pkt->nfiles ) { - send_size = sizeof(LM_FREE) + (free_pkt->nfiles-1)*sizeof(INT); - if ( send_size > fp_size ) - return ( dberr(S_SYSERR) ); - if ( nw_send(lsn, (MESSAGE *)free_pkt, send_size) ) - return( neterr() ); - } -#endif - return( db_status = S_OKAY ); -} -#endif -#ifndef NO_TRANS -/*------------------------------------------------------------------------ - Record Lock Bit Functions -------------------------------------------------------------------------*/ -/* Set record lock bit of current record -*/ -d_rlbset(TASK_ONLY) -TASK_DECL -{ -#ifndef SINGLE_USER - FILE_NO file; - INT rid; - int record_lock; -#endif - DB_ENTER(NO_DB_ID TASK_ID LOCK_SET(LOCK_IO)); - if ( ! curr_rec ) RETURN( dberr(S_NOCR) ); - -#ifndef SINGLE_USER - file = NUM2INT((FILE_NO)((curr_rec >> FILESHIFT) & FILEMASK), ft_offset); - - if ( dbopen == 1 && - (record_lock = (app_locks[file] >= 0 && !excl_locks[file])) ) { - /* request record-lock on file */ - lock_pkt->nfiles = 1; - lock_pkt->locks[0].type = 'R'; - lock_pkt->locks[0].fref = file_refs[file]; - if ( send_lock() != S_OKAY ) RETURN( db_status ); - if ( lock_reply.status != L_OKAY ) - RETURN( db_status = S_UNAVAIL ); - } - if ( dio_rrlb(curr_rec, &rid) != S_OKAY ) - RETURN( db_status ); - if ( rid & RLBMASK ) - rlb_status = S_LOCKED; - else { - rid |= RLBMASK; - rlb_status = dio_wrlb(curr_rec, rid); - } - if ( dbopen == 1 && record_lock ) { - /* free or downgrade record-lock on file */ - if ( app_locks[file] ) { - lock_pkt->nfiles = 1; - lock_pkt->locks[0].type = 'r'; - lock_pkt->locks[0].fref = file_refs[file]; - if ( send_lock() != S_OKAY ) RETURN( db_status ); - } - else { - free_pkt->nfiles = 1; - free_pkt->frefs[0] = file_refs[file]; - if ( send_free() != S_OKAY ) RETURN( db_status ); - } - } - RETURN( db_status = rlb_status ); -#else - RETURN( db_status = S_OKAY ); -#endif -} -#endif -#ifndef NO_TRANS -/* Clear record lock bit of current record -*/ -d_rlbclr(TASK_ONLY) -TASK_DECL -{ -#ifndef SINGLE_USER - FILE_NO file; - INT rid; -#endif - DB_ENTER(NO_DB_ID TASK_ID LOCK_SET(LOCK_IO)); - if ( ! curr_rec ) RETURN( dberr(S_NOCR) ); -#ifndef SINGLE_USER - file = NUM2INT((FILE_NO)((curr_rec >> FILESHIFT) & FILEMASK), ft_offset); - - /* ensure that changes are allowed */ - if (dbopen == 1 && trans_id && app_locks[file] >= 0 && !excl_locks[file]) - RETURN( dberr(S_NOTLOCKED) ); - - if ( dbopen == 1 && ! trans_id ) { - /* request record-lock on file */ - lock_pkt->nfiles = 1; - lock_pkt->locks[0].type = 'R'; - lock_pkt->locks[0].fref = file_refs[file]; - if ( send_lock() != S_OKAY ) RETURN( db_status ); - if ( lock_reply.status != L_OKAY ) - RETURN( db_status = S_UNAVAIL ); - } - /* read rlb */ - if ( dio_rrlb(curr_rec, &rid) != S_OKAY ) - RETURN( db_status ); - - /* clear rlb */ - rid &= ~RLBMASK; - rlb_status = S_UNLOCKED; - dio_wrlb(curr_rec, rid); - - if ( dbopen == 1 && ! trans_id ) { - /* free or downgrade record-lock on file */ - if ( app_locks[file] ) { - lock_pkt->nfiles = 1; - lock_pkt->locks[0].type = 'r'; - lock_pkt->locks[0].fref = file_refs[file]; - if ( send_lock() != S_OKAY ) RETURN( db_status ); - } - else { - free_pkt->nfiles = 1; - free_pkt->frefs[0] = file_refs[file]; - if ( send_free() != S_OKAY ) RETURN( db_status ); - } - } -#else - db_status = S_OKAY; -#endif - RETURN( db_status ); -} -#endif - - -#ifndef NO_TRANS -/* Test record lock bit of current record -*/ -d_rlbtst(TASK_ONLY) -TASK_DECL -{ -#ifndef SINGLE_USER - INT rid; -#endif - - DB_ENTER(NO_DB_ID TASK_ID LOCK_SET(LOCK_IO)); - - if ( ! curr_rec ) RETURN( dberr(S_NOCR) ); - -#ifndef SINGLE_USER - if ( dio_rrlb(curr_rec, &rid) != S_OKAY ) - RETURN( db_status ); - - if ( rid & RLBMASK ) - db_status = S_LOCKED; - else - db_status = S_UNLOCKED; - - RETURN( rlb_status = db_status ); -#else - RETURN( db_status = S_UNLOCKED ); -#endif - -} -#endif - - - -#ifndef NO_TRANS -/*------------------------------------------------------------------------ - Database Transaction Processing Functions -------------------------------------------------------------------------*/ - -/* Begin transaction -*/ -d_trbegin(tid TASK_PARM) -const char *tid; -TASK_DECL -{ - DB_ENTER(NO_DB_ID TASK_ID LOCK_SET(LOCK_IO)); - - db_status = S_OKAY; - - if ( ! dbopen ) RETURN( dberr(S_DBOPEN) ); - - if ( tid == NULL ) RETURN( dberr(S_TRANSID) ); - - - if ( trans_id ) RETURN( dberr(S_TRACTIVE) ); - - /* changes were possible outside a transaction */ - dio_flush(); - - if ( use_ovfl ) { - o_init(); - } - trans_id = tid; - RETURN( db_status ); -} -#endif - - -#ifndef NO_TRANS -/* End transaction -*/ -d_trend(TASK_ONLY) -TASK_DECL -{ -#ifndef SINGLE_USER - int ft_lc; /* loop control */ - LM_TRCOMMIT trcom_pkt; - LM_TREND trend_pkt; - LM_LOCKREQ *lockreq_ptr; - FILE_NO *fref_ptr; - int *appl_ptr, *keptl_ptr, *excl_ptr; -#endif - - DB_ENTER(NO_DB_ID TASK_ID LOCK_SET(LOCK_IO)); - - db_status = S_OKAY; - if( ! trans_id ) RETURN( dberr(S_TRNOTACT) ); - - if( trlog_flag ) - /* mark start of trx in archive log file */ - d_trmark(); - - /* flush data to database or overflow */ - if ( dio_flush() != S_OKAY ) RETURN( db_status ); - - if ( (dboptions & TRLOGGING) && use_ovfl ) { - /* End trx using overflow file */ - - /* flush recovery data to overflow file */ - if ( o_flush() != S_OKAY ) RETURN( db_status ); - -#ifndef SINGLE_USER - trcom_pkt.fcn = L_TRCOMMIT; - strcpy(trcom_pkt.logfile, dblog); - if ( nw_send(lsn, (MESSAGE *)&trcom_pkt, sizeof(LM_TRCOMMIT)) ) - RETURN( neterr() ); -#endif - trcommit = TRUE; - -#ifndef GENERAL - if ( taf_add(dblog) != S_OKAY ) RETURN( db_status ); /* after nw_send */ -#endif - - /* allow for user interrupt to test recovery */ - if ( db_txtest ) dberr(S_DEBUG); - - if( cache_ovfl ) { - /* update db from overflow file */ - if ( o_update() != S_OKAY ) RETURN( db_status ); - } - - /* flush modified cache data to database */ - if ( dio_flush() != S_OKAY ) RETURN( db_status ); - -#ifndef GENERAL - if ( taf_del(dblog) != S_OKAY ) RETURN( db_status ); /* before nw_send */ -#endif - } -#ifndef SINGLE_USER - trend_pkt.fcn = L_TREND; - if ( nw_send(lsn, (MESSAGE *)&trend_pkt, sizeof(LM_TREND)) ) - RETURN( neterr() ); -#endif - trcommit = FALSE; - - if( trlog_flag ) - /* mark end of trx in archive log file */ - d_trbound(); - - trans_id = NULL; - o_init(); /*[305] clear cache_ovfl flag */ - -#ifndef SINGLE_USER - if ( dbopen == 1 ) { - /* free unkept, non-exclusive file locks */ - lock_pkt->nfiles = free_pkt->nfiles = 0; - for (ft_lc = size_ft, fref_ptr = file_refs, appl_ptr = app_locks, - keptl_ptr = kept_locks, excl_ptr = excl_locks; - --ft_lc >= 0; ++fref_ptr, ++appl_ptr, ++keptl_ptr, ++excl_ptr) { - if (*excl_ptr) - *appl_ptr = *keptl_ptr; - else if ( *appl_ptr == -1 ) { - if ( (*appl_ptr = *keptl_ptr) > 0 ) { - lockreq_ptr = &lock_pkt->locks[lock_pkt->nfiles++]; - lockreq_ptr->type = 'r'; - lockreq_ptr->fref = *fref_ptr; - } - else - free_pkt->frefs[free_pkt->nfiles++] = *fref_ptr; - } - else if ( *appl_ptr && (*appl_ptr = *keptl_ptr) == 0 ) - free_pkt->frefs[free_pkt->nfiles++] = *fref_ptr; - *keptl_ptr = 0; - } - /* send lock downgrade request */ - if ( send_lock() != S_OKAY || send_free() != S_OKAY ) - RETURN( db_status ); - - /* clear lock descriptors */ - reset_locks(); - - /* reset all key file positions */ - key_reset(size_ft); - - /* clear page buffers */ - dio_clear(); - } -#endif - RETURN( db_status ); -} -#endif - - -#ifndef NO_TRANS -/* Abort transaction -*/ -d_trabort(TASK_ONLY) -TASK_DECL -{ -#ifdef SINGLE_USER - DB_ENTER(NO_DB_ID TASK_ID LOCK_SET(LOCK_IO)); - if (!trans_id) - RETURN (dberr(S_TRNOTACT)); - trans_id = NULL; - dio_pzclr(); /*[425] clear page zero BEFORE dio_clear */ - dio_clear(); /*[353] clear cache */ - RETURN (db_status = S_OKAY); -#else - int i; - int *keptl_ptr; - struct lock_descr *ld_ptr; - - DB_ENTER(NO_DB_ID TASK_ID LOCK_SET(LOCK_IO)); - - db_status = S_OKAY; - if ( ! trans_id ) RETURN( dberr(S_TRNOTACT) ); - - if ( dbopen == 1 ) { - /* Revert any kept locks to unkept status */ - for (i = 0, keptl_ptr = kept_locks; i < size_ft; ++i, ++keptl_ptr) - *keptl_ptr = 0; - for (i = 0, ld_ptr = rec_locks; i < size_rt; ++i, ++ld_ptr) - ld_ptr->fl_kept = FALSE; - for (i = 0, ld_ptr = set_locks; i < size_st; ++i, ++ld_ptr) - ld_ptr->fl_kept = FALSE; - for (i = 0, ld_ptr = key_locks; i < keyl_cnt; ++i, ++ld_ptr) - ld_ptr->fl_kept = FALSE; - } - trans_id = NULL; - o_init(); /*[305] clear cache_ovfl flag */ - - dio_pzclr(); /*[425] clear page zero BEFORE d_freeall */ - if ( dbopen == 1 ) d_freeall(TASK_ONLY); - dio_clear(); - - RETURN( db_status = S_OKAY ); -#endif -} -#endif #ifndef SINGLE_USER /* Report a network error diff --git a/cde/lib/DtSearch/raima/dbtype.h b/cde/lib/DtSearch/raima/dbtype.h index 7934d8a9..7e99b37e 100644 --- a/cde/lib/DtSearch/raima/dbtype.h +++ b/cde/lib/DtSearch/raima/dbtype.h @@ -107,9 +107,7 @@ Failure to do so will produce compilation errors. HHS = Harris H-series */ -#ifdef NO_TRANS #define SINGLE_USER -#endif #ifdef SINGLE_USER #define NO_TIMESTAMP #endif @@ -563,9 +561,6 @@ typedef struct page_entry { BOOLEAN modified; /* TRUE if page has been modified */ INT holdcnt; /* "hold-in-cache" counter */ short lu_slot; /* lookup table slot pointing to this entry */ -#ifndef NO_TRANS - F_ADDR ovfl_addr; /* overflow file address of page */ -#endif CHAR_P Buff; /* page buffer pointer */ } PAGE_ENTRY; #define buff Buff.ptr diff --git a/cde/lib/DtSearch/raima/destroy.c b/cde/lib/DtSearch/raima/destroy.c index fc785f3f..a21ded9b 100644 --- a/cde/lib/DtSearch/raima/destroy.c +++ b/cde/lib/DtSearch/raima/destroy.c @@ -61,19 +61,11 @@ TASK_DECL { int ft_lc; /* loop control */ FILE_ENTRY *file_ptr; -#ifndef NO_TRANS - int ovfl_save; -#endif DB_ENTER(NO_DB_ID TASK_ID LOCK_SET(LOCK_ALL)); /* database must be closed (might be multiple databases open) */ if ( dbopen ) d_close(TASK_ONLY); -#ifndef NO_TRANS - - ovfl_save = use_ovfl; - use_ovfl = NO; -#endif /* prepare for the inittab and read in the database tables */ if ((initdbt(dbname) != S_OKAY) || (inittab() != S_OKAY)) @@ -86,10 +78,6 @@ TASK_DECL /* free all residual memory */ termfree(); -#ifndef NO_TRANS - - use_ovfl = ovfl_save; -#endif RETURN( db_status ); } diff --git a/cde/lib/DtSearch/raima/dio.c b/cde/lib/DtSearch/raima/dio.c index d01d982b..b88b0ca4 100644 --- a/cde/lib/DtSearch/raima/dio.c +++ b/cde/lib/DtSearch/raima/dio.c @@ -128,44 +128,6 @@ int debugging_dio_init = FALSE; int debugging_dio_close = FALSE; #endif -#ifndef NO_TRANS - -/* On MS-DOS networks, files must be closed whenever a lock is freed. - Function dio_clrfile is called whenever a lock is freed to clear - from the cache the pages of the file whose lock is being freed. - CLosing and opening files on Unix, VMS and other host computers, - however, is very slow and is not necessary for database integrity. - The following constant definition specifies whether or not the files - need to be closed. A definition per supported MS-DOS compiler is - required. -*/ -#ifdef MSC -#define CLOSE_FILES -#endif -#ifdef LAT -#define CLOSE_FILES -#endif -#ifdef WIZ -#define CLOSE_FILES -#endif -#ifdef TURBO -#define CLOSE_FILES -#endif -/*------------ transaction logging data ------------*/ -#define DEFIXPAGES 4 /* default number of index cache pages */ -#define MINIXPAGES 2 /* minimum number of index cache pages */ -int ix_pgtab_sz = DEFIXPAGES; -LOOKUP_ENTRY_P Ix_lookup = POINTER_INIT(); /* index page lookup table */ -PAGE_ENTRY_P Ixpg_table = POINTER_INIT(); /* index page table */ -static int ixpg_lru_slot; /* least recently accessed ix page */ - -/* transaction logging enabled flag */ -int trlog_flag = 0; /* set only by user implemented functions */ - -BOOLEAN use_ovfl = YES; /* Default to using overflow */ -CHAR_P Dbpgbuff = POINTER_INIT(); /* allocated by dio_init used by o_update */ -/*------------ end of transaction logging data ------------*/ -#endif /* NO_TRANS */ #ifndef SINGLE_USER #define EXCL_OPEN() (dbopen >= 2) @@ -211,12 +173,7 @@ static void cache_init(P1(int) Pi(LOOKUP_ENTRY *) static int dio_pzinit(P0); static int clear_cache(P1(FILE_NO) Pi(FILE_NO)); static int dio_pzflush(P0); -#ifdef NO_TRANS static int dio_in(P1(PAGE_ENTRY *) Pi(LOOKUP_ENTRY *)); -#else -static int dio_in(P1(PAGE_ENTRY *) Pi(LOOKUP_ENTRY *) - Pi(BOOLEAN)); -#endif #define used_files Used_files.ptr #define db_lookup Db_lookup.ptr @@ -250,11 +207,6 @@ int ixpgs; /* # of index cache pages - ignored in single-user version */ db_pgtab_sz = (dbpgs <= MINDBPAGES) ? MINDBPAGES : dbpgs; -#ifndef NO_TRANS - if ( use_ovfl ) { - ix_pgtab_sz = (ixpgs <= MINIXPAGES) ? MINIXPAGES : ixpgs; - } -#endif return( db_status = S_OKAY ); } @@ -358,11 +310,6 @@ dio_init() if ( page_size > largest_page ) { if ( (tempbuff = ALLOC(&Tempbuff, page_size, "tempbuff")) == NULL ) return( dberr(S_NOMEMORY) ); -#ifndef NO_TRANS - MEM_UNLOCK(&Dbpgbuff); - FREE(&Dbpgbuff); - Dbpgbuff = Tempbuff; -#endif largest_page = page_size; } #ifdef DEBUG_DIO @@ -406,29 +353,6 @@ dio_init() cache_init((int)db_pgtab_sz, db_lookup, dbpg_table, (int)page_size); /***cache_init(db_pgtab_sz, db_lookup, dbpg_table, page_size);****/ if (db_status != S_OKAY) return(db_status); -#ifndef NO_TRANS - if ( use_ovfl ) { - ix_lookup = - /* Macro references must be on one line for some compilers */ - (LOOKUP_ENTRY *) - ALLOC(&Ix_lookup, ix_pgtab_sz*sizeof(LOOKUP_ENTRY),"ix_lookup"); - ixpg_table = - /* Macro references must be on one line for some compilers */ - (PAGE_ENTRY *) - ALLOC(&Ixpg_table, ix_pgtab_sz*sizeof(PAGE_ENTRY), "ixpg_table"); - if ( !ix_lookup || !ixpg_table ) - return( dberr(S_NOMEMORY) ); - - cache_init(ix_pgtab_sz, ix_lookup, ixpg_table, IX_PAGESIZE); - if (db_status != S_OKAY) - return (db_status); - - if ( (dbpgbuff = ALLOC(&Dbpgbuff, page_size, "dbpgbuff")) == NULL ) - return( dberr(S_NOMEMORY) ); - - ixpg_lru_slot = 0; - } -#endif /* NO_TRANS */ last_file = 0; dbpg_lru_slot = 0; no_modheld = 0; @@ -472,9 +396,6 @@ int pgsize; pg_ptr->recently_used = FALSE; pg_ptr->modified = FALSE; pg_ptr->holdcnt = 0; -#ifndef NO_TRANS - pg_ptr->ovfl_addr = 0L; -#endif pg_ptr->buff = ALLOC(&pg_ptr->Buff, pgsize, db_avname); if (pg_ptr->buff == NULL) { #ifdef DEBUG_DIO @@ -517,20 +438,6 @@ void dio_free() } MEM_UNLOCK(&Dbpg_table); FREE(&Dbpg_table); -#ifndef NO_TRANS - if ( use_ovfl ) { - MEM_UNLOCK(&Ix_lookup); - FREE(&Ix_lookup); - for (pgt_lc = ix_pgtab_sz, pg_ptr = ixpg_table; --pgt_lc >= 0; ++pg_ptr) { - MEM_UNLOCK(&pg_ptr->Buff); - FREE(&pg_ptr->Buff); - } - MEM_UNLOCK(&Ixpg_table); - FREE(&Ixpg_table); - MEM_UNLOCK(&Dbpgbuff); - FREE(&Dbpgbuff); - } -#endif } /* dio_free() */ @@ -649,9 +556,6 @@ FILE_NO to_file; /* ..to (not thru) file "to_file" */ } pg_ptr->recently_used = FALSE; pg_ptr->holdcnt = 0; -#ifndef NO_TRANS - pg_ptr->ovfl_addr = 0L; -#endif ++lu_ptr; } } @@ -685,9 +589,6 @@ FILE_NO to_file; /* ..to (not thru) file "to_file" */ int dio_flush() { int pgt_lc; /* loop control */ -#ifndef NO_TRANS - int fno; -#endif PAGE_ENTRY *pg_ptr; LOOKUP_ENTRY *lu_ptr; @@ -702,28 +603,10 @@ int dio_flush() for (pgt_lc = db_pgtab_sz, pg_ptr = dbpg_table; --pgt_lc >= 0; ++pg_ptr) { if (!pg_ptr->modified) { -#ifndef NO_TRANS - pg_ptr->ovfl_addr = 0L; /*[612]*/ -#endif continue; } lu_ptr = &db_lookup[pg_ptr->lu_slot]; -#ifndef NO_TRANS - if ((dboptions & TRLOGGING) && trans_id && !trcommit && use_ovfl) { - /* flush to overflow/log file -- before tr commit */ - if (o_write(pg_ptr, lu_ptr) != S_OKAY) return( db_status ); - if ( lu_ptr->pageno > o_pages(lu_ptr->file) ) { - /* no need to rewrite this page at trcommit time */ - pg_ptr->holdcnt = 0; - pg_ptr->modified = FALSE; - --no_modheld; - } - continue; - } - pg_ptr->ovfl_addr = 0L; -#endif /* write directly to database */ -#ifdef NO_TRANS #ifdef DEBUG_DIO if (debugging_dio_close) { printf (__FILE__"723 dio_flush: write modified pg#%d @ %p\n", @@ -732,21 +615,9 @@ int dio_flush() } #endif if (dio_out(pg_ptr, lu_ptr) != S_OKAY) return( db_status ); -#else - if (dio_out(pg_ptr, lu_ptr, 1) != S_OKAY) return( db_status ); -#endif pg_ptr->holdcnt = 0; pg_ptr->modified = FALSE; --no_modheld; -#ifndef NO_TRANS - if ( trlog_flag ) { - fno = lu_ptr->file; - MEM_LOCK(&pg_ptr->Buff); - d_trlog(fno, (int)lu_ptr->pageno, pg_ptr->buff, - file_table[fno].ft_pgsize); - MEM_UNLOCK(&pg_ptr->Buff); - } -#endif } /* store the page zero values in the data file and return */ return( dio_pzflush() ); @@ -820,12 +691,6 @@ F_ADDR page_no; { PAGE_ENTRY *pg_ptr; -#ifndef NO_TRANS - /* ensure overflow data is initialized when exclusive db access */ - if ((trans_id && (dboptions & TRLOGGING) && use_ovfl) && - (o_fileinit(working_file) != S_OKAY)) - return( db_status ); -#endif #ifndef SINGLE_USER if ( dbopen == 1 ) { /* check shared access privileges */ @@ -936,12 +801,6 @@ int release; file = NUM2INT((FILE_NO)((dba >> FILESHIFT) & FILEMASK), ft_offset); -#ifndef NO_TRANS - /* ensure overflow data is initialized when exclusive db access */ - if ((trans_id && (dboptions & TRLOGGING) && use_ovfl) && - (o_fileinit(file) != S_OKAY)) - return( db_status ); -#endif #ifndef SINGLE_USER if (dbopen == 1) { if (!trans_id && !excl_locks[file]) @@ -1136,12 +995,7 @@ LOOKUP_ENTRY * *xlu_ptr;/* pointer to lookup table slot for found page*/ PAGE_ENTRY *pg_ptr; int *lru_ptr; int pg_slot; -#ifndef NO_TRANS - BOOLEAN db_cache; /* TRUE if currently using dbpg_table */ - F_ADDR ovfl_addr; -#endif -#ifdef NO_TRANS /* check if desired page was last one */ if ((file == last_dblu.file) && (page == last_dblu.pageno)) { @@ -1153,24 +1007,6 @@ LOOKUP_ENTRY * *xlu_ptr;/* pointer to lookup table slot for found page*/ } lookup = db_lookup; pgtab_sz = db_pgtab_sz; -#else /* NO_TRANS */ - if (db_cache = (!pg_table || (pg_table == dbpg_table))) { - /* check if desired page was last one */ - if ((file == last_dblu.file) && (page == last_dblu.pageno)) { - if (xlu_ptr != NULL) - *xlu_ptr = &db_lookup[last_dblu.slot]; - if (xpg_ptr != NULL) - *xpg_ptr = &dbpg_table[db_lookup[last_dblu.slot].pg_slot]; - return( db_status = S_OKAY ); - } - lookup = db_lookup; - pgtab_sz = db_pgtab_sz; - } - else { - lookup = ix_lookup; - pgtab_sz = ix_pgtab_sz; - } -#endif /* NO_TRANS */ /* perform binary search of sorted lookup table */ l = 0; u = pgtab_sz - 1; @@ -1183,16 +1019,9 @@ LOOKUP_ENTRY * *xlu_ptr;/* pointer to lookup table slot for found page*/ else if (cmp > 0) l = lu_slot + 1; else { -#ifndef NO_TRANS - if (db_cache) - { -#endif last_dblu.file = lu_ptr->file; last_dblu.pageno = lu_ptr->pageno; last_dblu.slot = lu_slot; -#ifndef NO_TRANS - } -#endif if (xlu_ptr != NULL) *xlu_ptr = lu_ptr; if (xpg_ptr != NULL) @@ -1209,30 +1038,8 @@ LOOKUP_ENTRY * *xlu_ptr;/* pointer to lookup table slot for found page*/ return( db_status = S_NOTFOUND ); } /* page not found - read into cache */ -#ifndef NO_TRANS - if( !use_ovfl && trans_id && (no_modheld == pgtab_sz) ) - return( db_status = S_TRCHANGES ); - - /* check to see if page is in overflow file */ - ovfl_addr = 0L; - if ( cache_ovfl && file != ov_file ) { - if ( o_search( file, page, &ovfl_addr ) != S_OKAY ) - return( db_status ); - } - /* check for overflow */ - if ( db_cache && trans_id && (no_modheld == pgtab_sz) && !cache_ovfl ) { - cache_ovfl = TRUE; - } - /* select a page to replace */ - if (db_cache) { - lru_ptr = &dbpg_lru_slot; - } else { - lru_ptr = &ixpg_lru_slot; - } -#else /* select a page to replace */ lru_ptr = &dbpg_lru_slot; -#endif /* NO_TRANS */ for (cnt = 2*pgtab_sz, pg_slot = *lru_ptr, pg_ptr = &pg_table[pg_slot]; --cnt >= 0; ++pg_slot, ++pg_ptr) { @@ -1243,36 +1050,11 @@ LOOKUP_ENTRY * *xlu_ptr;/* pointer to lookup table slot for found page*/ } replu_ptr = &lookup[pg_ptr->lu_slot]; if (!pg_ptr->recently_used && (pg_ptr->holdcnt == 0)) { -#ifdef NO_TRANS if (pg_ptr->modified) { dio_out(pg_ptr, replu_ptr); pg_ptr->modified = FALSE; --no_modheld; } -#else - if (pg_ptr->modified) { - /* allow updates outside transactions for single-user mode */ -#ifdef SINGLE_USER - if (!db_cache || (EXCL_OPEN() && !trans_id)) { -#else - if (!db_cache || ((EXCL_OPEN() || - excl_locks[lookup[pg_ptr->lu_slot].file]) && !trans_id)) { -#endif /* SINGLE_USER */ - /* ix page swapping occurs here */ - dio_out(pg_ptr, replu_ptr, db_cache); - pg_ptr->modified = FALSE; - if ( db_cache ) --no_modheld; - } - else { - if (!use_ovfl || !cache_ovfl) continue; /* skip modified pages */ - /* Write out modified page */ - pg_ptr->modified = FALSE; - --no_modheld; /* must be in db cache */ - if (o_write(pg_ptr, replu_ptr) != S_OKAY) return( db_status ); - } - } - pg_ptr->ovfl_addr = ovfl_addr; -#endif /* NO_TRANS */ pg_ptr->recently_used = TRUE; if ((*lru_ptr = (pg_slot + 1)) >= pgtab_sz) *lru_ptr = 0; @@ -1318,19 +1100,10 @@ LOOKUP_ENTRY * *xlu_ptr;/* pointer to lookup table slot for found page*/ *xlu_ptr = lu_ptr; if (xpg_ptr != NULL) *xpg_ptr = pg_ptr; -#ifdef NO_TRANS last_dblu.file = lu_ptr->file; last_dblu.pageno = lu_ptr->pageno; last_dblu.slot = lu_slot; dio_in(pg_ptr, lu_ptr); -#else - if (db_cache) { - last_dblu.file = lu_ptr->file; - last_dblu.pageno = lu_ptr->pageno; - last_dblu.slot = lu_slot; - } - dio_in(pg_ptr, lu_ptr, db_cache); -#endif return( db_status ); #undef tempbuff @@ -1355,16 +1128,9 @@ LOOKUP_ENTRY * *xlu_ptr;/* pointer to lookup table slot for found page*/ * page swap function. */ int -#ifndef NO_TRANS -dio_out(pg_ptr, lu_ptr, db_cache) -#else dio_out(pg_ptr, lu_ptr) -#endif PAGE_ENTRY *pg_ptr; /* page table entry to be output */ LOOKUP_ENTRY *lu_ptr; /* corresponding lookup table entry */ -#ifndef NO_TRANS - BOOLEAN db_cache; /* TRUE if pg_ptr is in db page cache */ -#endif { int desc; /* file descriptor */ int fno; /* file number */ @@ -1382,30 +1148,10 @@ LOOKUP_ENTRY *lu_ptr; /* corresponding lookup table entry */ netorder_timestamp = (ULONG) host_timestamp; HTONL (netorder_timestamp); -#ifdef NO_TRANS fno = lu_ptr->file; pgsize = file_table[fno].ft_pgsize; addr = lu_ptr->pageno * (long)pgsize; memcpy (pg_ptr->buff, &netorder_timestamp, sizeof(ULONG)); -#else - if ( db_cache ) { - fno = lu_ptr->file; - pgsize = file_table[fno].ft_pgsize; - } - else - pgsize = file_table[ov_file].ft_pgsize; - - if ( pg_ptr->ovfl_addr == 0L ) { - /* write to database */ - addr = lu_ptr->pageno * (long)pgsize; - memcpy (pg_ptr->buff, &netorder_timestamp, sizeof(ULONG)); - } - else { - /* write to overflow file */ - fno = ov_file; - addr = pg_ptr->ovfl_addr; - } -#endif if ( dio_open(fno) == S_OKAY ) { swab_page (pg_ptr->buff, &file_table[fno], HTON); desc = file_table[fno].ft_desc; @@ -1423,20 +1169,11 @@ LOOKUP_ENTRY *lu_ptr; /* corresponding lookup table entry */ /* dio_in */ /* */ /****************************************/ -#ifdef NO_TRANS /* Read in a page to the buffer */ static int dio_in(pg_ptr, lu_ptr) PAGE_ENTRY *pg_ptr; /* page table entry to be input */ LOOKUP_ENTRY *lu_ptr; /* corresponding to pg_ptr */ -#else -/* Read in a page to the buffer -*/ -static int dio_in(pg_ptr, lu_ptr, db_cache ) -PAGE_ENTRY *pg_ptr; /* page table entry to be input */ -LOOKUP_ENTRY *lu_ptr; /* corresponding to pg_ptr */ -BOOLEAN db_cache; /* TRUE if pg_ptr in db cache */ -#endif { int desc; /* file descriptor */ int fno; /* file number */ @@ -1447,24 +1184,8 @@ BOOLEAN db_cache; /* TRUE if pg_ptr in db cache */ int r; file_ptr = &file_table[fno = lu_ptr->file]; -#ifdef NO_TRANS pgsize = file_ptr->ft_pgsize; addr = lu_ptr->pageno*pgsize; -#else - pgsize = db_cache ? file_ptr->ft_pgsize : file_table[ov_file].ft_pgsize; - - if (pg_ptr->ovfl_addr == 0L) { - /* read from database file */ - /* if !db_cache, overflow address not set on initial read */ - addr = db_cache ? lu_ptr->pageno*pgsize : - (pg_ptr->ovfl_addr = lu_ptr->pageno); - } - else { - /* read from overflow file */ - file_ptr = &file_table[fno = ov_file]; - addr = pg_ptr->ovfl_addr; - } -#endif if ( dio_open(fno) == S_OKAY ) { desc = file_ptr->ft_desc; DB_LSEEK(desc, (off_t)addr, 0); @@ -1587,16 +1308,6 @@ static int dio_pzflush() char *cptr; int j; -#ifndef NO_TRANS - if ( (dboptions & TRLOGGING) && trans_id && !trcommit && use_ovfl ) { - /* flush to overflow/log file -- before tx commit */ - for (i = 0, pgzero_ptr = pgzero; i < size_ft; ++i, ++pgzero_ptr) { - if (pgzero_ptr->pz_modified ) - if ( o_pzwrite( i ) != S_OKAY ) return( db_status ); - } - } - else { -#endif /* flush modified page zeroes to database files */ for (i = 0, pgzero_ptr = pgzero, file_ptr = file_table; i < size_ft; ++i, ++pgzero_ptr, ++file_ptr) { @@ -1619,18 +1330,11 @@ static int dio_pzflush() if (DB_WRITE(desc, (char *)pgzero_ptr, PGZEROSZ) != PGZEROSZ) return( dberr(S_BADWRITE) ); pgzero_ptr->pz_modified = FALSE; -#ifndef NO_TRANS - if ( trlog_flag ) - d_trlog(i, 0, (char *)pgzero_ptr, PGZEROSZ); -#endif } #ifdef CLOSE_FILES dio_close(i); #endif } -#ifndef NO_TRANS - } -#endif return( db_status = S_OKAY ); } /* dio_pzflush() */ diff --git a/cde/lib/DtSearch/raima/inittab.c b/cde/lib/DtSearch/raima/inittab.c index 0a8fa32a..2bc9c979 100644 --- a/cde/lib/DtSearch/raima/inittab.c +++ b/cde/lib/DtSearch/raima/inittab.c @@ -550,11 +550,6 @@ static int alloc_dict() DB_ENTRY *db_ptr; /* allocate and initialize file_table */ -#ifndef NO_TRANS - if ( use_ovfl ) { - extra_file = 1; - } -#endif if ( old_no_of_dbs == 0 ) { old_size_ft = 0; diff --git a/cde/lib/DtSearch/raima/options.c b/cde/lib/DtSearch/raima/options.c index a3187cff..02418aea 100644 --- a/cde/lib/DtSearch/raima/options.c +++ b/cde/lib/DtSearch/raima/options.c @@ -53,9 +53,6 @@ TASK_DECL DB_ENTER(NO_DB_ID TASK_ID LOCK_SET(LOCK_ALL)); dboptions |= optflag; -#ifndef NO_TRANS - if ( optflag & ARCLOGGING ) d_tron(); -#endif #ifndef NO_COUNTRY if ( optflag & IGNORECASE ) { @@ -86,9 +83,6 @@ TASK_DECL DB_ENTER(NO_DB_ID TASK_ID LOCK_SET(LOCK_ALL)); dboptions &= ~optflag; -#ifndef NO_TRANS - if ( optflag & ARCLOGGING ) d_troff(); -#endif #ifndef NO_COUNTRY if ( optflag & IGNORECASE ) { diff --git a/cde/lib/DtSearch/raima/proto.h b/cde/lib/DtSearch/raima/proto.h index 23263b53..42aa9c5f 100644 --- a/cde/lib/DtSearch/raima/proto.h +++ b/cde/lib/DtSearch/raima/proto.h @@ -176,12 +176,7 @@ int dio_wrlb(P1(DB_ADDR) Pi(INT)); int dio_findpg(P1(FILE_NO) Pi(F_ADDR) Pi(PAGE_ENTRY *) Pi(PAGE_ENTRY * *) Pi(LOOKUP_ENTRY * *)); -#ifdef NO_TRANS int dio_out(P1(PAGE_ENTRY *) Pi(LOOKUP_ENTRY *)); -#else -int dio_out(P1(PAGE_ENTRY *) Pi(LOOKUP_ENTRY *) - Pi(BOOLEAN)); -#endif #ifndef NO_TIMESTAMP ULONG dio_pzsetts(P1(FILE_NO)); ULONG dio_pzgetts(P1(FILE_NO)); diff --git a/cde/lib/DtSearch/raima/trxlog.h b/cde/lib/DtSearch/raima/trxlog.h index 0ba6423d..c3acbbb2 100644 --- a/cde/lib/DtSearch/raima/trxlog.h +++ b/cde/lib/DtSearch/raima/trxlog.h @@ -62,39 +62,6 @@ /* (BITS(unsigned int)) */ #define BUI (8*sizeof(unsigned int)) -#ifndef NO_TRANS -/* ((((256*sizeof(F_ADDR))+D_BLKSZ-1) / D_BLKSZ)*D_BLKSZ) */ -#define IX_PAGESIZE 1024 - -/* (IX_PAGESIZE / sizeof(F_ADDR)) */ -#define IX_EPP 256 - -#define BITMAP_SIZE(pcnt) ((int)((IX_SIZE(pcnt)+(BUI-1)) / BUI)) - -#define IX_SIZE(pcnt) ((long)( ((pcnt) + (IX_EPP-1)) / IX_EPP)) - -/* Next define the base file offsets for entries in the overflow file */ - -#define BM_BASE( file ) ( root_ix[file].base ) -#define IX_BASE(file, pcnt) ((long)(BM_BASE(file) + (BITMAP_SIZE(pcnt)*sizeof(unsigned int)))) -#define PZ_BASE(file, pcnt) ((long)(IX_BASE(file, pcnt) + (IX_SIZE(pcnt)*IX_PAGESIZE))) - -/* -========================================================================== -*/ - -/* The following typedef'ed structure defines a single entry in the - root index data. */ - -typedef struct RI_ENTRY_S { - LONG pg_cnt; /* Number of pages currently in file */ - F_ADDR base; /* Base of data stored in overflow */ - BOOLEAN pz_modified; /* Was page zero written to overflow? */ - INT_P Bitmap; /* Used index page bitmap */ -} RI_ENTRY; -#define bitmap Bitmap.ptr -#define RI_ENTRY_IOSIZE (sizeof(RI_ENTRY)-sizeof(INT_P)+sizeof(INT *)) -#endif /* ========================================================================== @@ -111,12 +78,6 @@ typedef struct PGZERO_S { /* binary search lookup table entry */ -#ifndef NO_TRANS -/* External declarations */ -extern int trlog_flag; /* Transaction logging enabled flag */ -extern int trcommit; /* Transaction commit in progress flag */ -extern BOOLEAN use_ovfl; /* Do we use the overflow file ? */ -#endif /* Maximum number of transactions which can commit a time */ #ifndef SINGLE_USER diff --git a/cde/lib/DtSearch/raima/vista.h b/cde/lib/DtSearch/raima/vista.h index eae4271c..a0ace537 100644 --- a/cde/lib/DtSearch/raima/vista.h +++ b/cde/lib/DtSearch/raima/vista.h @@ -246,9 +246,6 @@ typedef LONG BOOLEAN; /* grouped lock request packet */ extern int db_status; -#ifndef NO_TRANS -extern int rlb_status; -#endif /* Mike Russell's custom open() flag. Default is O_RDWR. * Change to O_RDONLY prior to d_open() if not updating