Changeset 752 for trunk/server/lib/tdb/common/lock.c
- Timestamp:
- Nov 29, 2012, 2:06:31 PM (13 years ago)
- Location:
- trunk/server
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/server
- Property svn:mergeinfo changed
/vendor/current merged: 746,748
- Property svn:mergeinfo changed
-
trunk/server/lib/tdb/common/lock.c
r745 r752 103 103 104 104 errno = EINVAL; 105 TDB_LOG(( tdb, TDB_DEBUG_ERROR, "_mutex_brlock pid % X, failed (fd=%d) at offset %d rw_type=%d lck_type=%d len=%d, rc=%d\n",105 TDB_LOG(( tdb, TDB_DEBUG_ERROR, "_mutex_brlock pid %d, failed (fd=%d) at offset %d rw_type=%d lck_type=%d len=%d, rc=%d\n", 106 106 getpid(), tdb->fd, offset, rw_type, waitflag, (int)len, rc)); 107 107 tdb->ecode = TDB_ERR_LOCK; … … 125 125 off_t offStart; 126 126 off_t cbRange; 127 FILELOCK lockArea = {0}, unlockArea = {0} ;128 129 TDB_LOG((tdb, TDB_DEBUG_TRACE, "fcntl_lock in pid % X, fd %d, lck_type %s, rw_type %s, offset %d, len %d\n",127 FILELOCK lockArea = {0}, unlockArea = {0}, unlockArea1 = {0}; 128 129 TDB_LOG((tdb, TDB_DEBUG_TRACE, "fcntl_lock in pid %d, fd %d, lck_type %s, rw_type %s, offset %d, len %d\n", 130 130 getpid(), tdb->fd, lock_type(waitflag), read_type(rw), off, len)); 131 131 … … 144 144 unlockArea.lOffset = off; 145 145 unlockArea.lRange = len ? len : tdb->header.hash_size *4; //was LONG_MAX 146 unlockArea1.lOffset = off; 147 unlockArea1.lRange = len ? len : LONG_MAX; 146 148 break; 147 149 case F_RDLCK: … … 158 160 } 159 161 162 // why DosSetFileLocks() in the F_UNLCK case with len == 0, fails is really a question 163 // to overcome that i do 2 unlock with 2 different length (nasty workaround imho) 160 164 rc = DosSetFileLocks(tdb->fd, &unlockArea, &lockArea, SEM_IMMEDIATE_RETURN, fAccess); 165 if (rc != NO_ERROR && rw == F_UNLCK && len == 0) 166 rc = DosSetFileLocks(tdb->fd, &unlockArea1, &lockArea, SEM_IMMEDIATE_RETURN, fAccess); 161 167 162 168 if (rc != NO_ERROR && waitflag) { … … 164 170 do { 165 171 rc = DosSetFileLocks(tdb->fd, &unlockArea, &lockArea, 100, fAccess); 172 if (rc != NO_ERROR && rw == F_UNLCK && len == 0) 173 rc = DosSetFileLocks(tdb->fd, &unlockArea1, &lockArea, 100, fAccess); 166 174 count--; 167 175 } while( count>0 && rc !=NO_ERROR); … … 169 177 } 170 178 171 TDB_LOG(( tdb, TDB_DEBUG_TRACE, "fcntl_lock out pid % X, fd %d, lck_type %s, rw_type %s, offset %d, len %d, rc=%d\n",179 TDB_LOG(( tdb, TDB_DEBUG_TRACE, "fcntl_lock out pid %d, fd %d, lck_type %s, rw_type %s, offset %d, len %d, rc=%d\n", 172 180 getpid(), tdb->fd, lock_type(waitflag), read_type(rw), off, len, rc)); 173 181
Note:
See TracChangeset
for help on using the changeset viewer.