69 log_info(
LD_FS,
"Locking \"%s\"", filename);
70 fd = tor_open_cloexec(filename, O_RDWR|O_CREAT|O_TRUNC, 0600);
72 log_warn(
LD_FS,
"Couldn't open \"%s\" for locking: %s", filename,
78 _lseek(fd, 0, SEEK_SET);
79 if (_locking(fd, blocking ? _LK_LOCK : _LK_NBLCK, 1) < 0) {
80 if (errno != EACCES && errno != EDEADLOCK)
81 log_warn(
LD_FS,
"Couldn't lock \"%s\": %s", filename, strerror(errno));
87#elif defined(HAVE_FLOCK)
88 if (flock(fd, LOCK_EX|(blocking ? 0 : LOCK_NB)) < 0) {
89 if (errno != EWOULDBLOCK)
90 log_warn(
LD_FS,
"Couldn't lock \"%s\": %s", filename, strerror(errno));
99 memset(&lock, 0,
sizeof(lock));
100 lock.l_type = F_WRLCK;
101 lock.l_whence = SEEK_SET;
102 if (fcntl(fd, blocking ? F_SETLKW : F_SETLK, &lock) < 0) {
103 if (errno != EACCES && errno != EAGAIN)
104 log_warn(
LD_FS,
"Couldn't lock \"%s\": %s", filename, strerror(errno));
114 result->
filename = tor_strdup(filename);
static tor_lockfile_t * lockfile