diff --git a/src/lib/common/file.c b/src/lib/common/file.c index 03f489eb..84e17c8e 100644 --- a/src/lib/common/file.c +++ b/src/lib/common/file.c @@ -66,6 +66,7 @@ int ef_open(int type, int how) { struct empfile *ep; + struct flock lock; int oflags, fd, fsiz, size; if (ef_check(type) < 0) @@ -90,6 +91,14 @@ ef_open(int type, int how) return 0; } + lock.l_type = how & EFF_RDONLY ? F_RDLCK : F_WRLCK; + lock.l_whence = SEEK_SET; + lock.l_start = lock.l_len = 0; + if (fcntl(fd, F_SETLK, &lock) == -1) { + logerror("Can't lock %s (%s)", ep->file, strerror(errno)); + return 0; + } + /* get file size */ fsiz = fsize(fd); if (fsiz % ep->size) {