[Devel] unlock range

Alexander Morozov amorozov на etersoft.ru
Вт Сен 27 16:02:01 MSD 2011


> Такого, чтобы при запросе на разблокирование [0,10] и [5,15] сразу
> снималась блокировка с [0,15] нет, это получаются два отдельных вызова,
> которые обрабатываются последовательно.

Оказывается, wineserver может снимать и много блокировок за раз:
/* remove all locks on a given fd */
static void remove_fd_locks( struct fd *fd )
{
    file_pos_t start = FILE_POS_T_MAX, end = 0;
    struct list *ptr;

    while ((ptr = list_head( &fd->locks )))
    {
        struct file_lock *lock = LIST_ENTRY( ptr, struct file_lock, fd_entry 
);
        if (lock->start < start) start = lock->start;
        if (!lock->end || lock->end > end) end = lock->end - 1;
        remove_lock( lock, 0 );
    }
    if (start < end) remove_unix_locks( fd, start, end + 1 );
}


Подробная информация о списке рассылки Devel