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