Ignore:
Timestamp:
Mar 11, 2009, 9:14:55 AM (16 years ago)
Author:
Paul Smedley
Message:

Add 'missing' 3.0.34 diffs

Location:
branches/samba-3.0/source/tdb/common
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/samba-3.0/source/tdb/common/io.c

    r124 r165  
    101101        if (tdb->map_ptr) {
    102102                memcpy(off + (char *)tdb->map_ptr, buf, len);
    103         } else if (pwrite(tdb->fd, buf, len, off) != (ssize_t)len) {
    104                 /* Ensure ecode is set for log fn. */
    105                 tdb->ecode = TDB_ERR_IO;
    106                 TDB_LOG((tdb, TDB_DEBUG_FATAL,"tdb_write failed at %d len=%d (%s)\n",
    107                            off, len, strerror(errno)));
    108         } else {
    109                 ssize_t written = pwrite(tdb->fd, buf, len, off);
    110                 if ((written != (ssize_t)len) && (written != -1)) {
    111                         /* try once more */
    112                         TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_write: wrote only "
    113                                  "%d of %d bytes at %d, trying once more\n",
     103        } else {
     104                ssize_t written = pwrite(tdb->fd, buf, len, off);
     105                if ((written != (ssize_t)len) && (written != -1)) {
     106                        /* try once more */
     107                        TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_write: wrote only "
     108                                 "%d of %d bytes at %d, trying once more\n",
    114109                                 (uint32_t)written, len, off));
    115                         errno = ENOSPC;
    116                         written = pwrite(tdb->fd, (void *)((char *)buf+written),
    117                                          len-written,
    118                                          off+written);
    119                 }
    120                 if (written == -1) {
    121                         /* Ensure ecode is set for log fn. */
    122                         tdb->ecode = TDB_ERR_IO;
    123                         TDB_LOG((tdb, TDB_DEBUG_FATAL,"tdb_write failed at %d "
    124                                  "len=%d (%s)\n", off, len, strerror(errno)));
    125                         return TDB_ERRCODE(TDB_ERR_IO, -1);
    126                 } else if (written != (ssize_t)len) {
    127                         TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_write: failed to "
    128                                  "write %d bytes at %d in two attempts\n",
    129                                  len, off));
    130                         errno = ENOSPC;
     110                        errno = ENOSPC;
     111                        written = pwrite(tdb->fd, (void *)((char *)buf+written),
     112                                         len-written,
     113                                         off+written);
     114                }
     115                if (written == -1) {
     116                        /* Ensure ecode is set for log fn. */
     117                        tdb->ecode = TDB_ERR_IO;
     118                        TDB_LOG((tdb, TDB_DEBUG_FATAL,"tdb_write failed at %d "
     119                                 "len=%d (%s)\n", off, len, strerror(errno)));
     120                        return TDB_ERRCODE(TDB_ERR_IO, -1);
     121                } else if (written != (ssize_t)len) {
     122                        TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_write: failed to "
     123                                 "write %d bytes at %d in two attempts\n",
     124                                 len, off));
     125                        errno = ENOSPC;
    131126#ifdef __OS2__
    132127                // remove our lock
     
    215210#ifdef HAVE_MMAP
    216211        if (tdb->map_ptr) {
    217                 int ret = munmap(tdb->map_ptr, tdb->map_size);
     212                int ret;
     213
     214                ret = munmap(tdb->map_ptr, tdb->map_size);
    218215                if (ret != 0)
    219216                        return ret;
  • branches/samba-3.0/source/tdb/common/open.c

    r62 r165  
    364364         * do with disk files, and resume here by releasing their
    365365         * global lock and hooking into the active list. */
     366#ifndef __OS2__
     367        if (tdb->methods->tdb_brlock(tdb, GLOBAL_LOCK, F_UNLCK, F_SETLKW, 0, 1) == -1)
     368                goto fail;
     369#endif
    366370        tdb->next = tdbs;
    367371        tdbs = tdb;
     
    370374 fail:
    371375        { int save_errno = errno;
    372         tdb->methods->tdb_brlock(tdb, GLOBAL_LOCK, F_UNLCK, F_SETLKW, 0, 1);
    373376
    374377        if (!tdb)
     
    555558        if ((tdb->flags & TDB_CLEAR_IF_FIRST) &&
    556559            (tdb->methods->tdb_brlock(tdb, ACTIVE_LOCK, F_RDLCK, F_SETLKW, 0, 1) == -1)) {
    557 // YD sem handle was wrong, testme #ifndef __OS2__ // PS 20070511 hack for WINS server crash
    558560                TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_reopen: failed to obtain active lock\n"));
    559561                goto fail;
    560 //#endif
    561562        }
    562563        if (fstat(tdb->fd, &st) != 0) {
  • branches/samba-3.0/source/tdb/common/transaction.c

    r61 r165  
    558558                return -1;
    559559        }
    560 #ifdef MS_SYNC
     560#ifdef HAVE_MMAP
    561561        if (tdb->map_ptr) {
    562562                tdb_off_t moffset = offset & ~(tdb->page_size-1);
Note: See TracChangeset for help on using the changeset viewer.