Lines Matching refs:flock

1558 /*! Returns \c true when either \a flock is \c NULL or the \a flock intersects
1562 advisory_lock_intersects(struct advisory_lock* lock, struct flock* flock)
1564 if (flock == NULL)
1567 return lock->start <= flock->l_start - 1 + flock->l_len
1568 && lock->end >= flock->l_start;
1575 test_advisory_lock(struct vnode* vnode, struct flock* flock)
1577 flock->l_type = F_UNLCK;
1589 if (lock->team != team && advisory_lock_intersects(lock, flock)) {
1591 if (flock->l_type != F_RDLCK || !lock->shared) {
1593 flock->l_type = lock->shared ? F_RDLCK : F_WRLCK;
1594 flock->l_whence = SEEK_SET;
1595 flock->l_start = lock->start;
1596 flock->l_len = lock->end - lock->start + 1;
1597 flock->l_pid = lock->team;
1609 if \a flock is NULL.
1613 struct file_descriptor* descriptor, struct flock* flock)
1615 FUNCTION(("release_advisory_lock(vnode = %p, flock = %p)\n", vnode, flock));
1629 // Remove flock() locks
1632 && advisory_lock_intersects(lock, flock)) {
1636 if (flock != NULL) {
1637 startsBefore = lock->start < flock->l_start;
1638 endsBeyond = lock->end > flock->l_start - 1 + flock->l_len;
1642 // lock is completely contained in flock
1646 lock->end = flock->l_start - 1;
1649 lock->start = flock->l_start + flock->l_len;
1660 lock->end = flock->l_start - 1;
1666 secondLock->start = flock->l_start + flock->l_len;
1721 BSD flock() semantics are used, that is, all children can unlock the file
1727 struct file_descriptor* descriptor, struct flock* flock, bool wait)
1729 FUNCTION(("acquire_advisory_lock(vnode = %p, flock = %p, wait = %s)\n",
1730 vnode, flock, wait ? "yes" : "no"));
1732 bool shared = flock->l_type == F_RDLCK;
1758 && advisory_lock_intersects(lock, flock)) {
1799 lock->start = flock->l_start;
1800 lock->end = flock->l_start - 1 + flock->l_len;
1810 /*! Normalizes the \a flock structure to make it easier to compare the
1815 normalize_flock(struct file_descriptor* descriptor, struct flock* flock)
1817 switch (flock->l_whence) {
1821 flock->l_start += descriptor->pos;
1836 flock->l_start += stat.st_size;
1843 if (flock->l_start < 0)
1844 flock->l_start = 0;
1845 if (flock->l_len == 0)
1846 flock->l_len = OFF_MAX;
1849 if (flock->l_start > 0 && OFF_MAX - flock->l_start < flock->l_len)
1850 flock->l_len = OFF_MAX - flock->l_start;
1852 if (flock->l_len < 0) {
1854 flock->l_start += flock->l_len;
1855 flock->l_len = -flock->l_len;
6154 struct flock flock;
6173 memcpy(&flock, (struct flock*)argument, sizeof(struct flock));
6174 else if (user_memcpy(&flock, (struct flock*)argument,
6175 sizeof(struct flock)) != B_OK)
6246 struct flock normalizedLock;
6248 memcpy(&normalizedLock, &flock, sizeof(struct flock));
6262 flock.l_type = F_UNLCK;
6264 memcpy((struct flock*)argument, &flock,
6265 sizeof(struct flock));
6267 status = user_memcpy((struct flock*)argument,
6268 &flock, sizeof(struct flock));
6277 memcpy((struct flock*)argument,
6278 &normalizedLock, sizeof(struct flock));
6280 status = user_memcpy((struct flock*)argument,
6281 &normalizedLock, sizeof(struct flock));
6291 status = normalize_flock(descriptor.Get(), &flock);
6297 } else if (flock.l_type == F_UNLCK) {
6300 &flock);
6303 &flock);
6308 && flock.l_type == F_WRLCK)
6310 && flock.l_type == F_RDLCK))
6315 descriptor->cookie, &flock, op == F_SETLKW);
6318 &flock, op == F_SETLKW);
9226 struct flock flock;
9227 flock.l_start = 0;
9228 flock.l_len = OFF_MAX;
9229 flock.l_whence = 0;
9230 flock.l_type = (operation & LOCK_SH) != 0 ? F_RDLCK : F_WRLCK;
9235 status = FS_CALL(vnode, release_lock, descriptor->cookie, &flock);
9237 status = release_advisory_lock(vnode, NULL, descriptor.Get(), &flock);
9240 status = FS_CALL(vnode, acquire_lock, descriptor->cookie, &flock,
9243 status = acquire_advisory_lock(vnode, NULL, descriptor.Get(), &flock,