Changeset 829 for branches


Ignore:
Timestamp:
Nov 13, 2013, 2:36:44 PM (12 years ago)
Author:
Silvan Scherrer
Message:

Samba 3.5: backported some code from 3.6

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  
    138138        APIRET      rc;
    139139        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",
    146143                getpid(), tdb->fd, lock_type(lck_type), read_type(rw_type), offset, len));
    147144
     
    163160
    164161        /* flags and order */
    165         fAccess = 0; /* exclusive */
    166162        switch (rw_type)
    167163        {
    168164                case F_UNLCK:
    169                         fLock = 0;
     165                        unlockArea.lOffset = offset;
     166                        unlockArea.lRange  = len ? len : LONG_MAX;
    170167                        break;
    171168                case F_RDLCK:
     169                        lockArea.lOffset = offset;
     170                        lockArea.lRange  = len ? len : LONG_MAX;
    172171                        fAccess = 1; /* read-only */
    173172                case F_WRLCK:
    174                         fLock = 1;
     173                        lockArea.lOffset = offset;
     174                        lockArea.lRange  = len ? len : LONG_MAX;
    175175                        break;
    176176                default:
     
    178178        }
    179179               
    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);
    185181
    186182        if (rc != NO_ERROR && lck_type == F_SETLKW) {
    187183                int     count = 20;
    188184                do {
    189                         rc = DosSetFileLocks(tdb->fd, &aflock[0], &aflock[1], 100, fAccess);
     185                        rc = DosSetFileLocks(tdb->fd, &unlockArea, &lockArea, 100, fAccess);
    190186                        count--;
    191187                } while( count>0 && rc !=NO_ERROR);
    192188
    193189        }
     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
    194194        if (rc != NO_ERROR) {
    195195                errno  = EINVAL;
     
    209209                return -1;
    210210        }
    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 
    215211#else
    216212
  • branches/samba-3.5.x/lib/tdb/common/open.c

    r781 r829  
    185185
    186186#ifdef __OS2__
    187         if (os2_crtsem(tdb, name, "tdb_open_ex") != 0) {
     187        if (os2_CrtSem(tdb, name, "tdb_open_ex") != 0) {
    188188                goto fail;
    189189        }
     
    407407        SAFE_FREE(tdb->name);
    408408#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");
    415410#endif
    416411        if (tdb->fd != -1)
     
    465460        SAFE_FREE(tdb->lockrecs);
    466461#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");   
    473463#endif
    474464
     
    514504
    515505#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) {
    524509                goto fail;
    525510        }
     
    613598
    614599#ifdef __OS2__
    615 int os2_crtsem(struct tdb_context *tdb, const char *name, const char *caller)
     600int os2_CrtSem(struct tdb_context *tdb, const char *name, const char *caller)
    616601{
    617602        // name could be null, so handle it
     
    661646        return 0;
    662647}
     648
     649int 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}
    663660#endif
    664661               
Note: See TracChangeset for help on using the changeset viewer.