Ignore:
Timestamp:
May 27, 2007, 12:26:26 AM (18 years ago)
Author:
Paul Smedley
Message:

Upgrade source to 3.0.25a

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/samba/source/smbd/blocking.c

    r1 r39  
    4040        SMB_BIG_UINT count;
    4141        uint32 lock_pid;
     42        uint32 blocking_pid; /* PID that blocks us. */
    4243        enum brl_flavour lock_flav;
    4344        enum brl_type lock_type;
     
    8788                enum brl_type lock_type,
    8889                enum brl_flavour lock_flav,
    89                 SMB_BIG_UINT offset, SMB_BIG_UINT count)
     90                SMB_BIG_UINT offset,
     91                SMB_BIG_UINT count,
     92                uint32 blocking_pid)
    9093{
    9194        static BOOL set_lock_msg;
     
    128131        blr->lock_num = lock_num;
    129132        blr->lock_pid = lock_pid;
     133        blr->blocking_pid = blocking_pid;
    130134        blr->lock_flav = lock_flav;
    131135        blr->lock_type = lock_type;
     
    143147                        lock_type == READ_LOCK ? PENDING_READ_LOCK : PENDING_WRITE_LOCK,
    144148                        blr->lock_flav,
    145                         lock_timeout ? True : False); /* blocking_lock. */
     149                        lock_timeout ? True : False, /* blocking_lock. */
     150                        NULL);
    146151
    147152        if (!NT_STATUS_IS_OK(status)) {
     
    381386                                WINDOWS_LOCK,
    382387                                True,
    383                                 &status);
     388                                &status,
     389                                &blr->blocking_pid);
    384390
    385391                TALLOC_FREE(br_lck);
     
    441447                                                blr->lock_flav,
    442448                                                True,
    443                                                 &status);
     449                                                &status,
     450                                                &blr->blocking_pid);
    444451        TALLOC_FREE(br_lck);
    445452
     
    599606        unsigned int timeout_ms = default_timeout_ms;
    600607        struct timeval tv_curr;
    601         SMB_BIG_INT min_tv_dif_us = 0x7FFFFFFF; /* A large +ve number. */
     608        SMB_BIG_INT min_tv_dif_us = default_timeout_ms * 1000;
    602609        blocking_lock_record *blr = blocking_lock_queue;
    603610
     
    613620
    614621                if (timeval_is_zero(&blr->expire_time)) {
     622                        /*
     623                         * If we're blocked on pid 0xFFFFFFFF this is
     624                         * a POSIX lock, so calculate a timeout of
     625                         * 10 seconds.
     626                         */
     627                        if (blr->blocking_pid == 0xFFFFFFFF) {
     628                                tv_dif_us = 10 * 1000 * 1000;
     629                                min_tv_dif_us = MIN(min_tv_dif_us, tv_dif_us);
     630                        }
    615631                        continue; /* Never timeout. */
    616632                }
Note: See TracChangeset for help on using the changeset viewer.