[Devel] unlock range

Pavel Shilovsky piastryyy на gmail.com
Вт Сен 27 18:31:24 MSD 2011


27 сентября 2011 г. 16:02 пользователь Alexander Morozov
<amorozov на etersoft.ru> написал:
>> Такого, чтобы при запросе на разблокирование [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 );
> }
>

Я так понимаю, что текущий код блокировок из ntdll не делает подобного
и оставляет файловой системе возможность снять их самостоятельно?

-- 
Best regards,
Pavel Shilovsky.


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