NFS/lockd problem s flock()
Richard Willmann
mk7ygre33apsq23c at foo.sk
Fri Nov 25 04:55:46 CET 2011
Pozdravujem,
Prosim, narazil som na velmi zvlastny problem s flock().
Set-up pozostava s NFS servera (OpenSolaris) a NFS klienta (FreeBSD). Vsetko
na NFS 3.
Vysvetlim asi najlepsie na priklade:
int main(int argc, char **argv) {
fd = open("/var/chroot/apache22/www/...", O_RDWR);
printf("open: %d\n", fd);
res = flock(fd, LOCK_EX);
printf("lock: %d\n", res);
sleep(20);
res = flock(fd, LOCK_UN);
printf("unclok: %d\n", res);
res = close(fd);
printf("close: %d\n", res);
return 0;
}
Ked spustim vyssie uvedeny test dva krat po sebe, vsetko funguje tak ako ma.
Otvorim subor, uzamknem, pockam, uvolnim zamok ... Problem nastane, pri
paralelnom spusteni. Predstavte si dve konzoly, test spustim s odstupom par
sekund v jednej aj druhej.
Po uvolneni zamku prvou instanciou je predpoklad, ze druha sa zobudi z
volania flock(), uzamkne subor atd. To sa aj stane, avsak s niekolko
sekundovym oneskorenim. Niekolko sekundovym = cca. 15 - 20 sekund.
Priznam sa, pozrel som za poslednych par dni snad vsetko ale chybu sa mi
nepodarilo najst. Nema niekto prosim napad? Nestretol sa niekto s niecim
podobnym?
Za kazdy napad budem vdacny :)
Pekny den
rwi
More information about the Users-l
mailing list