| Summary: | Не работает ограничение на число процессов, работающих с файлом | ||
|---|---|---|---|
| Product: | CIFS@Etersoft | Reporter: | Александр Морозов <amorozov> |
| Component: | блокировки файлов и доступ | Assignee: | Александр Морозов <amorozov> |
| Status: | CLOSED FIXED | QA Contact: | Александр Морозов <amorozov> |
| Severity: | normal | ||
| Priority: | P4 | CC: | piastry |
| Version: | не указана | ||
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Заявки RT: | Связано с: | 6244 | |
| Дата напоминания: | |||
| Bug Depends on: | |||
| Bug Blocks: | 3043 | ||
На CIFS F_GETLK вместо pid процесса, установившего блокировку, возвращает pid процесса, выполняющего F_GETLK. Есть тест: cifs/getlk.c в репозитории git.office:/projects/wine-etersoft-devel.git Это известная проблема и средствами CIFS её решить нельзя из-за ограничений самого протокола. Нужен какой-то другой механизм без использования поля pid в возвращаемой структуре GET_LK. Сделал, чтобы в set_concurlock не использовалось F_GETLK. Изменения внесены в открытую (отправлены патчи в wine-patches-test) и закрытую части. > В лицензии:
> TYPE_LICENSE=Terminal
> COUNT_LICENSE=3
Успешно открываются только 3 файла.
Клиент: Debian 5.0.6 x64(fixed) в vbox
etercifs 4.5.5-eter3debian
2.6.26-2-amd64 #1 SMP
wine-etersoft-network 1.0.12-eter18debian
wine-etersoft 1.0.12-eter8.14debian
Сервер: cellar
2.6.32-ovz-el-alt25 #1 SMP
samba-3.5.9-alt1
|
Создал пять wineprefix`ов, с помощью такого скрипта запускаю пять процессов, открывающих один файл на CIFS-разделе: #! /bin/sh xterm -e 'WINEPREFIX="${HOME}/.wine" wine open_file.exe' & xterm -e 'WINEPREFIX="${HOME}/wine_test_2" wine open_file_2.exe' & xterm -e 'WINEPREFIX="${HOME}/wine_test_3" wine open_file_3.exe' & xterm -e 'WINEPREFIX="${HOME}/wine_test_4" wine open_file_4.exe' & xterm -e 'WINEPREFIX="${HOME}/wine_test_5" wine open_file_5.exe' & echo -n "Enter smth:" read WINEPREFIX="${HOME}/.wine" wineserver -k WINEPREFIX="${HOME}/wine_test_2" wineserver -k WINEPREFIX="${HOME}/wine_test_3" wineserver -k WINEPREFIX="${HOME}/wine_test_4" wineserver -k WINEPREFIX="${HOME}/wine_test_5" wineserver -k open_file.c: #include <windows.h> #include <stdio.h> int main() { FILE *f = fopen("test", "w+"); printf("opening \"test\": %s\n", f ? "ok" : "failed"); SuspendThread(GetCurrentThread()); } В лицензии: TYPE_LICENSE=Terminal COUNT_LICENSE=3 Но при этом файл может быть успешно открыт и больше чем тремя процессами (четырьмя или пятью, когда как). На NFS ограничение на число файлов работает. etercifs-4.5.3-alt1 2.6.32-std-def-alt16 #1 SMP wine-etersoft-sql-1.0.12-alt14.1 wine-etersoft-1.0.12-alt7.25