Changeset 829 for branches/samba-3.5.x/lib/tdb/common/lock.c
- Timestamp:
- Nov 13, 2013, 2:36:44 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/samba-3.5.x/lib/tdb/common/lock.c
r781 r829 138 138 APIRET rc; 139 139 ULONG fAccess = 0; 140 int fLock = 0; 141 off_t cbFile; 142 off_t offStart; 143 off_t cbRange; 144 145 TDB_LOG((tdb, TDB_DEBUG_TRACE, "tdb_brlock pid %X, fd %d, lck_type %s, rw_type %s, offset %d, len %d\n", 140 FILELOCK lockArea = {0}, unlockArea = {0}; 141 142 TDB_LOG((tdb, TDB_DEBUG_TRACE, "tdb_brlock in pid %X, fd %d, lck_type %s, rw_type %s, offset %d, len %d\n", 146 143 getpid(), tdb->fd, lock_type(lck_type), read_type(rw_type), offset, len)); 147 144 … … 163 160 164 161 /* flags and order */ 165 fAccess = 0; /* exclusive */166 162 switch (rw_type) 167 163 { 168 164 case F_UNLCK: 169 fLock = 0; 165 unlockArea.lOffset = offset; 166 unlockArea.lRange = len ? len : LONG_MAX; 170 167 break; 171 168 case F_RDLCK: 169 lockArea.lOffset = offset; 170 lockArea.lRange = len ? len : LONG_MAX; 172 171 fAccess = 1; /* read-only */ 173 172 case F_WRLCK: 174 fLock = 1; 173 lockArea.lOffset = offset; 174 lockArea.lRange = len ? len : LONG_MAX; 175 175 break; 176 176 default: … … 178 178 } 179 179 180 FILELOCK aflock[2]; 181 bzero(&aflock[(fLock + 1) & 1], sizeof(aflock[0])); 182 aflock[fLock].lOffset = offset; 183 aflock[fLock].lRange = len ? len : LONG_MAX; 184 rc = DosSetFileLocks(tdb->fd, &aflock[0], &aflock[1], SEM_IMMEDIATE_RETURN, fAccess); 180 rc = DosSetFileLocks(tdb->fd, &unlockArea, &lockArea, SEM_IMMEDIATE_RETURN, fAccess); 185 181 186 182 if (rc != NO_ERROR && lck_type == F_SETLKW) { 187 183 int count = 20; 188 184 do { 189 rc = DosSetFileLocks(tdb->fd, & aflock[0], &aflock[1], 100, fAccess);185 rc = DosSetFileLocks(tdb->fd, &unlockArea, &lockArea, 100, fAccess); 190 186 count--; 191 187 } while( count>0 && rc !=NO_ERROR); 192 188 193 189 } 190 191 TDB_LOG(( tdb, TDB_DEBUG_TRACE, "tdb_brlock out pid %d, fd %d, lck_type %s, rw_type %s, offset %d, len %d, rc=%d\n", 192 getpid(), tdb->fd, lock_type(lck_type), read_type(rw_type), offset, len, rc)); 193 194 194 if (rc != NO_ERROR) { 195 195 errno = EINVAL; … … 209 209 return -1; 210 210 } 211 212 TDB_LOG(( tdb, TDB_DEBUG_TRACE, "tdb_brlock pid %X, fd %d, lck_type %s, rw_type %s, offset %d, len %d DONE\n",213 getpid(), tdb->fd, lock_type(lck_type), read_type(rw_type), offset, len));214 215 211 #else 216 212
Note:
See TracChangeset
for help on using the changeset viewer.