Print this page
OS-5591 Double flock(3C) causes undue block
OS-5585 fcntl(F_OFD_GETLK) should return EINVAL on bad parameters
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
Approved by: Robert Mustacchi <rm@joyent.com>
@@ -521,14 +521,14 @@
* file will drop the lock (e.g. lock /etc/passwd, call a library function
* which opens /etc/passwd to read the file, when the library closes it's
* file descriptor the application loses its lock and does not know).
* 2) Locks are not preserved across fork(2).
*
- * Because these locks are only assoiciated with a pid they are per-process.
- * This is why any close will drop the lock and is also why once the process
- * forks then the lock is no longer related to the new process. These locks can
- * be considered as pid-ful.
+ * Because these locks are only associated with a PID, they are per-process.
+ * This is why any close will drop the lock and is also why, once the process
+ * forks, the lock is no longer related to the new process. These locks can
+ * be considered as PID-ful.
*
* See ofdlock() for the implementation of a similar but improved locking
* scheme.
*/
int
@@ -1001,11 +1001,11 @@
{
file_t *fp;
ASSERT(IS_DEAD(lock));
- if ((fp = lock->l_ofd) != NULL)
+ if ((fp = lock->l_ofd) != NULL && fp->f_filock == (struct filock *)lock)
fp->f_filock = NULL;
if (IS_REFERENCED(lock)) {
lock->l_state |= DELETED_LOCK;
return;