Changeset 647


Ignore:
Timestamp:
Nov 2, 2011, 7:24:23 PM (14 years ago)
Author:
Silvan Scherrer
Message:

Samba Server 3.5: prevent internal locks, fixes ticket:173 and ticket:140

Location:
trunk/server/lib/tdb/common
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/server/lib/tdb/common/lock.c

    r456 r647  
    139139        ULONG       fAccess = 0;
    140140        int         fLock = 0;
    141         ULONG       ulTimeout;
    142141        off_t       cbFile;
    143142        off_t       offStart;
     
    146145        TDB_LOG((tdb, TDB_DEBUG_TRACE, "tdb_brlock pid %X, fd %d, lck_type %s, rw_type %s, offset %d, len %d\n",
    147146                getpid(), tdb->fd, lock_type(lck_type), read_type(rw_type), offset, len));
     147
     148        if (tdb->flags & TDB_NOLOCK) {
     149                return 0;
     150        }
     151
     152        if ((rw_type == F_WRLCK) && (tdb->read_only || tdb->traverse_read)) {
     153                tdb->ecode = TDB_ERR_RDONLY;
     154                return -1;
     155        }
    148156       
    149157        switch( offset) {
     
    152160        case TRANSACTION_LOCK:
    153161                return _mutex_brlock( tdb, offset, rw_type,  lck_type,  probe, len);
    154         }
    155 
    156         if (tdb->flags & TDB_NOLOCK) {
    157                 return 0;
    158         }
    159 
    160         if ((rw_type == F_WRLCK) && (tdb->read_only || tdb->traverse_read)) {
    161                 tdb->ecode = TDB_ERR_RDONLY;
    162                 return -1;
    163162        }
    164163
     
    178177                        break;
    179178        }
    180        
    181         if (lck_type == F_SETLKW)
    182                 ulTimeout = SEM_INDEFINITE_WAIT;
    183         else
    184                 ulTimeout = SEM_IMMEDIATE_RETURN;
    185        
     179               
    186180        FILELOCK   aflock[2];
    187181        bzero(&aflock[(fLock + 1) & 1], sizeof(aflock[0]));
  • trunk/server/lib/tdb/common/tdb.c

    r414 r647  
    923923
    924924        tdb_trace(tdb, "tdb_repack");
     925TDB_LOG((tdb, TDB_DEBUG_TRACE, "@remove me: repack enter\n"));
    925926
    926927        if (tdb_transaction_start(tdb) != 0) {
     
    928929                return -1;
    929930        }
     931TDB_LOG((tdb, TDB_DEBUG_TRACE, "@remove me: nach start\n"));
    930932
    931933        tmp_db = tdb_open("tmpdb", tdb_hash_size(tdb), TDB_INTERNAL, O_RDWR|O_CREAT, 0);
     
    935937                return -1;
    936938        }
     939TDB_LOG((tdb, TDB_DEBUG_TRACE, "@remove me: nach tmp open\n"));
    937940
    938941        state.error = false;
     
    945948                return -1;             
    946949        }
     950TDB_LOG((tdb, TDB_DEBUG_TRACE, "@remove me: nach travers\n"));
    947951
    948952        if (state.error) {
     
    959963                return -1;
    960964        }
     965TDB_LOG((tdb, TDB_DEBUG_TRACE, "@remove me: nach wipe\n"));
    961966
    962967        state.error = false;
     
    969974                return -1;             
    970975        }
     976TDB_LOG((tdb, TDB_DEBUG_TRACE, "@remove me: nach read\n"));
    971977
    972978        if (state.error) {
     
    978984
    979985        tdb_close(tmp_db);
     986TDB_LOG((tdb, TDB_DEBUG_TRACE, "@remove me: nach close\n"));
    980987
    981988        if (tdb_transaction_commit(tdb) != 0) {
  • trunk/server/lib/tdb/common/traverse.c

    r414 r647  
    216216                      tdb_traverse_func fn, void *private_data)
    217217{
     218
    218219        struct tdb_traverse_lock tl = { NULL, 0, 0, F_RDLCK };
    219220        int ret;
Note: See TracChangeset for help on using the changeset viewer.