- Timestamp:
- Nov 13, 2013, 2:36:44 PM (12 years ago)
- Location:
- branches/samba-3.5.x/lib/tdb/common
- Files:
-
- 2 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 -
branches/samba-3.5.x/lib/tdb/common/open.c
r781 r829 185 185 186 186 #ifdef __OS2__ 187 if (os2_ crtsem(tdb, name, "tdb_open_ex") != 0) {187 if (os2_CrtSem(tdb, name, "tdb_open_ex") != 0) { 188 188 goto fail; 189 189 } … … 407 407 SAFE_FREE(tdb->name); 408 408 #ifdef __OS2__ 409 DosCloseMutexSem( tdb->hGlobalLock); 410 tdb->hGlobalLock = 0; 411 DosCloseMutexSem( tdb->hActiveLock); 412 tdb->hActiveLock = 0; 413 DosCloseMutexSem( tdb->hTransactionLock); 414 tdb->hTransactionLock = 0; 409 os2_DltSem(tdb, "tdb_open_ex"); 415 410 #endif 416 411 if (tdb->fd != -1) … … 465 460 SAFE_FREE(tdb->lockrecs); 466 461 #ifdef __OS2__ 467 DosCloseMutexSem( tdb->hGlobalLock); 468 tdb->hGlobalLock = 0; 469 DosCloseMutexSem( tdb->hActiveLock); 470 tdb->hActiveLock = 0; 471 DosCloseMutexSem( tdb->hTransactionLock); 472 tdb->hTransactionLock = 0; 462 os2_DltSem(tdb, "tdb_close"); 473 463 #endif 474 464 … … 514 504 515 505 #ifdef __OS2__ 516 DosCloseMutexSem( tdb->hGlobalLock); 517 tdb->hGlobalLock = 0; 518 DosCloseMutexSem( tdb->hActiveLock); 519 tdb->hActiveLock = 0; 520 DosCloseMutexSem( tdb->hTransactionLock); 521 tdb->hTransactionLock = 0; 522 523 if (os2_crtsem(tdb, tdb->name, "tdb_reopen") != 0) { 506 os2_DltSem(tdb, "tdb_reopen"); 507 508 if (os2_CrtSem(tdb, tdb->name, "tdb_reopen") != 0) { 524 509 goto fail; 525 510 } … … 613 598 614 599 #ifdef __OS2__ 615 int os2_ crtsem(struct tdb_context *tdb, const char *name, const char *caller)600 int os2_CrtSem(struct tdb_context *tdb, const char *name, const char *caller) 616 601 { 617 602 // name could be null, so handle it … … 661 646 return 0; 662 647 } 648 649 int os2_DltSem(struct tdb_context *tdb, const char *caller) 650 { 651 DosCloseMutexSem( tdb->hGlobalLock); 652 tdb->hGlobalLock = 0; 653 DosCloseMutexSem( tdb->hActiveLock); 654 tdb->hActiveLock = 0; 655 DosCloseMutexSem( tdb->hTransactionLock); 656 tdb->hTransactionLock = 0; 657 658 return 0; 659 } 663 660 #endif 664 661
Note:
See TracChangeset
for help on using the changeset viewer.