658 |
/* Try to link to the lockfile. */ |
/* Try to link to the lockfile. */ |
659 |
if (link (lock->data.dot.nfslock, lock->data.dot.dotlock) == -1) |
if (link (lock->data.dot.nfslock, lock->data.dot.dotlock) == -1) |
660 |
{ |
{ |
661 |
|
unlink (lock->data.dot.nfslock); |
662 |
if (errno == EEXIST) |
if (errno == EEXIST) |
663 |
return MU_ERR_LOCK_CONFLICT; |
return MU_ERR_LOCK_CONFLICT; |
664 |
return errno; |
return errno; |
665 |
} |
} |
666 |
|
|
667 |
if ((fd = open (lock->data.dot.dotlock, O_RDONLY)) == -1) |
if ((fd = open (lock->data.dot.dotlock, O_RDONLY)) == -1) |
668 |
return errno; |
{ |
669 |
|
unlink (lock->data.dot.nfslock); |
670 |
|
return errno; |
671 |
|
} |
672 |
|
|
673 |
err = stat_check (lock->data.dot.nfslock, fd, 2); |
err = stat_check (lock->data.dot.nfslock, fd, 2); |
674 |
if (err) |
if (err) |
675 |
{ |
{ |
676 |
|
unlink (lock->data.dot.nfslock); |
677 |
if (err == EINVAL) |
if (err == EINVAL) |
678 |
return MU_ERR_LOCK_BAD_LOCK; |
return MU_ERR_LOCK_BAD_LOCK; |
679 |
return errno; |
return errno; |