Создал пять 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
На 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