Re: On file locking
От | Giles Lean |
---|---|
Тема | Re: On file locking |
Дата | |
Msg-id | 6326.1044163042@nemeton.com.au обсуждение исходный текст |
Ответ на | Re: On file locking (Curt Sampson <cjs@cynic.net>) |
Ответы |
Re: On file locking
|
Список | pgsql-hackers |
Curt Sampson <cjs@cynic.net> wrote: > At any rate, it seems to me highly unlikely that, since the child has > the *same* descriptor as the parent had, that the lock would > disappear. It depends on the lock function. After fork(): o with flock() the lock continues to be held, but will be unlocked if any child process explicitly unlocks it o with fcntl() the lock is not inherited in the child o with lockf() the standards and manual pages don't say Boring reference material follows. flock ===== From the NetBSD manual page: NOTES Locks are on files, not file descriptors. That is, file descriptors du- plicated through dup(2) or fork(2) donot result in multiple instances of a lock, but rather multiple references to a single lock. If a process holdinga lock on a file forks and the child explicitly unlocks the file, the parent will lose its lock. The Red Hat Linux 8.0 manual page has similar wording. (No standards to check here -- flock() is not standardised in POSIX, X/Open, Single Unix Standard, ...) fcntl ===== The NetBSD manual page notes that these locks are not inherited by child processes: Another minor semantic problem with this interface is that locks are not inherited by a child process created usingthe fork(2) function. Ditto the Single Unix Standard versions 2 and 3. lockf() ======= The standards and manual pages that I've checked don't discuss fork() in relation to lockf(), which seems a peculiar ommission and makes me suspect that behaviour has varied historically. In practice I would expect lockf() semantics to be the same as fcntl(). Regards, Giles
В списке pgsql-hackers по дате отправления: